JargeZ / VK Yandex Music

// ==UserScript==
// @name         VK Yandex Music
// @version      0.1.0
// @description  
// @author       Pavel Khorikov
// @match        https://vk.com/*
// @homepage     https://vk.com/
// @grant        GM_notification
// @license      MIT
// @copyright 2018, JargeZ (https://openuserjs.org//users/JargeZ)
// ==/UserScript==

(function () {

  //var trackObserver = new MutationObserver(listModified);
  var list = document.getElementsByClassName("audio_row");
  for (var i = 0; i < list.length; i++) {
    audioFound(list[i]);
  }

  // Создадим observer для нотификаций о создании новых элементов на странице
  var listObserver = new MutationObserver(elementAdded);
  // и следим за body, когда новые списки аудиозаписей добавятся
  listObserver.observe(document.body, {
    childList: true,
    subtree: true
  });

  // вызывается при любой модификации DOM страницы
  function elementAdded(mutations) {
    for (var i = 0; i < mutations.length; i++) {
      var added = mutations[i].addedNodes;
      // просмотрим добавленные элементы на предмет списка аудиозаписей
      for (var j = 0; j < added.length; j++) {
        findAudioAttach(added[j]);
      }
    }
  }

  // рекурсивная функция проходит по добавленным элементам и ищет в них списки аудиозаписей
  function findAudioAttach(node) {
    if (node.classList && node.classList.contains('audio_row')) // у списка должно быть id
    {
      // alert("ad");
      console.log(node);
      audioFound(node);
    }

    var child = node.firstElementChild;
    while (child) {
      findAudioAttach(child); // вызываем рекурсивно для всех дочерних элементов
      child = child.nextElementSibling;
    }
  }

  function audioFound(audioNode) {
    if (audioNode.hasAttribute("data-audio")) // в новом списке уже есть аудиозаписи
    {
      var data_audio = JSON.parse(audioNode.getAttribute("data-audio"));
      var audio_string = data_audio[4] + " - " + data_audio[3];
      var yamusic_searchurl = "https://music.yandex.ru/search?text=" + audio_string;
      audioNode.innerHTML = '<a href="' + yamusic_searchurl + '" target="_blank">music.yandex/search: ' + audio_string + '</a>';
      console.log(data_audio);
    }
    //trackObserver.observe(listNode, {childList: true});  // следим за добавлением новых записей -> listModified()
  }

})();