2017-01-09 3 views
2

Pandora AJAX не работает с waitForKeyElements. Я потратил несколько часов, пытаясь понять, где я ошибся, и не могу это решить.Pandora ajax не работает с waitForKeyElements

Он работает один раз, но не работает, когда воспроизводится следующий трек.

// ==UserScript== 
// @name   Pandora I am listening to 
// @namespace http://tampermonkey.net/ 
// @version  0.1 
// @description Pandora I am listening to 
// @author  You 
// @match  http*://www.pandora.com/* 
// @include  https://www.pandora.com/station/play/* 
// @require  https://gist.githubusercontent.com/BrockA/2625891/raw/9c97aa67ff9c5d56be34a55ad6c18a314e5eb548/waitForKeyElements.js 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js 
// @grant GM_addStyle 
// ==/UserScript== 

function liveNow() { 
    setTimeout(function() { 
     console.log(`Now Playing ${$(".songTitle")[0].innerHTML}`); 
    }, 6000); // delay for loading of music 

} 

waitForKeyElements ("#trackInfoContainer .songTitle", liveNow); 

ответ

3

#trackInfoContainer повторно используемый (не создается заново) для каждого дополнительного трека.

Таким образом, это не достаточно, чтобы ждать создания узла, вы должны также проверить, что содержание изменились.
Вот как сделать это с waitForKeyElements:

waitForKeyElements ("#trackInfoContainer .songTitle", liveNow); 

function liveNow (jNode) { 
    var titleText = jNode.text().trim(); 
    var lastText = jNode.data ("lastText") || ""; 

    if (titleText != lastText) { 
     jNode.data ("lastText", titleText); 
     console.log (`Now Playing ${titleText}`); 
    } 
    return true; //-- Tell waitForKeyElements to keep checking this node. 
} 
+1

Спасибо Брок, вы удивительные. – Hellonearthis

+0

Добро пожаловать; рад помочь. –