NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==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() } })();