【问题标题】:Script ok with Greasemonkey but does not work with Tampermonkey. Is it because of jQuery $.get?脚本可以与 Greasemonkey 一起使用,但不适用于 Tampermonkey。是因为 jQuery $.get 吗?
【发布时间】:2013-04-27 20:58:30
【问题描述】:

我在 Firefox 上为 Greasemonkey 编写了一个脚本,它运行良好,但在带有 Tampermonkey 的 Chrome 上没有任何反应。

我知道 Chrome 限制使用 jQuery。

我特别发现了这个有趣的帖子:How can I use jQuery in Greasemonkey scripts in Google Chrome?

我尝试了解决方案,但仍然无法让我的脚本在 Google Chrome 上运行。我真的看不出我的脚本有什么问题,因为它真的很短。可能是什么问题?

这是我正在尝试运行的脚本(我缩短了它,但我不得不留下很多,因为我不知道问题出在哪里):

// ==UserScript==
// @name        Rainbow DDB
// @namespace   Rainbow DDB
// @description Change la couleur du "!" lorsqu'une DDB est en cours.
// @include     http://www.jeuxvideo.com/forums/3-*
// @include     http://www.jeuxvideo.com/forums/1-*
// @version     1
// ==/UserScript==

dates = document.getElementsByClassName("date");
i=0;

function ddb(j) {
    url = dates[j].getElementsByTagName("a")[0].href;
    $.get(url, function(data) {
        if (data.contains("Signalement déjà fait")) {
            document.getElementsByClassName("date")[j].getElementsByTagName("a")[0].getElementsByTagName("img")[0].src = "http://image.noelshack.com/fichiers/2013/17/1367080939-14agd2.png";
        }
    });
}

while (i<dates.length) {
    ddb(i);
    i++;
}

唯一可能出问题的是 $.get,不是吗?

我尝试了不同的解决方案,在执行我的脚本之前询问加载 jQuery,我尝试使用建议的模板但它肯定不起作用,我不明白为什么。

【问题讨论】:

    标签: javascript jquery google-chrome greasemonkey tampermonkey


    【解决方案1】:

    如果你想使用本网站内嵌的jQuery版本,你需要用unsafeWindow引用它。换句话说:您需要在用户脚本的开头将$ 定义为unsafeWindow.$

    这里是固定代码:

    // ==UserScript==
    // @name        Rainbow DDB
    // @namespace   Rainbow DDB
    // @description Change la couleur du "!" lorsqu'une DDB est en cours.
    // @include     http://www.jeuxvideo.com/forums/3-*
    // @include     http://www.jeuxvideo.com/forums/1-*
    // @version     1
    // ==/UserScript==
    
    
    $ = unsafeWindow.$;
    dates = document.getElementsByClassName("date");
    i=0;
    
    function ddb(j) {
        url = dates[j].getElementsByTagName("a")[0].href;
        $.get(url, function(data) {
            if (data.indexOf("Signalement déjà fait") >= 0) {
                document.getElementsByClassName("date")[j].getElementsByTagName("a")[0].getElementsByTagName("img")[0].src = "http://image.noelshack.com/fichiers/2013/17/1367080939-14agd2.png";
            }
        });
    }
    
    
    while (i<dates.length) {
        ddb(i);
        i++;
    }
    

    【讨论】:

    • 感谢您对我的问题感兴趣。不幸的是,我已经尝试过这个解决方案,但它不起作用。我又试了,alert() 显示正确,其余的都没有。
    • 但是$.get 函数工作正常,这是你的问题。那你到底是什么意思?什么显示不正确?另外请给我示例网址,我可以在其中全面测试此脚本。
    • 对不起,这是一个法语网站:jeuxvideo.com/forums/… 你必须连接,所以,试试这些 ID:nickname = "Vlalprolo" 和 password="kourkis87" 如果脚本工作正常,你应该看到图标“!”在第一个帖子的右侧蓝色,而不是红色。
    • 我无法使用这些数据登录,但我设法找到了导致问题的原因。这与您使用的 contains() 方法有关。正如您在 MDN 页面上看到的,它仅在 Firefox 中受支持。您可以将其替换为 indexOf() 方法。我编辑了我的答案,你可以试试新代码。
    • 是的,我很愚蠢,我忘记了这个昵称被禁止了......也就是说,IndexOf 的更改包含工作得很好,谢谢! (如果你想确定,再次使用标识符“Unamiegentille”和密码 kourkis87)所有这些关于 jQuery 和 Chrome 之间不兼容的研究......我真的没有找到正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2012-01-17
    相关资源
    最近更新 更多