greasemonkey脚本每次加载时只触发一次

时间:2016-09-27 17:27:12

标签: greasemonkey pageload

我用这个URL运行一个greasemonkey脚本:

// @include     https://www.younow.com*
// @exclude     https://www.younow.com/steven73*
// @grant       none
// ==/UserScript==
alert("HELLO");

我的问题是我的剧本似乎被禁用了#34; on" internal"导航,这意味着当我运行Firefox并且我加载的第一个站点是" steven73"页面和加载页面后,我点击其中一个"现在趋势"飘带(你在网站的左上角看到它)我想得到消息框,但msgbox没有出现,因为脚本只执行"一次"当我访问" younow"网站第一次(F5除外)。似乎"内部"导航阻止了脚本的执行。每次单击"现在趋势"之一时,如何执行我的脚本?飘带(在网站的左上角)?

1 个答案:

答案 0 :(得分:0)

此网站使用AJAX方法更新页面的某些部分,而无需完全重新加载 而用户脚本仅在初始页面加载时自动执行。

为click事件添加一个监听器,并在暂停后运行代码:

document.addEventListener('click', function(e) {
    var trendingLink = e.target.closest('a.trending_image');
    if (trendingLink) {
        var stopTryingAt = Date.now() + 5000;
        var interval = setInterval(function() {
            if (document.querySelector('.player-main')) {
                clearInterval(interval);
                onPageUpdated();
            }
            if (Date.now() >= stopTryingAt) {
                clearInterval(interval);
            }
        }, 20);
    }
});

function onPageUpdated() {
    console.log('Boo!');
}

或者使用waitForKeyElements函数等待元素出现而不是使用setInterval。