没有TamperMonkey,脚本不起作用

时间:2013-05-22 21:56:16

标签: javascript google-chrome userscripts tampermonkey

我正在处理用户脚本,我注意到它在使用TamperMonkey设置时有效,但在手动添加到Chrome扩展程序时却没有。

我希望我知道它到期了什么?什么TamperMonkey有更多的运行我的脚本?

// ==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-*
// ==/UserScript==

$ = unsafeWindow.$;
var dates = document.querySelectorAll(".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) {
   dates[j].querySelector("a img").src = "http://image.noelshack.com/fichiers/2013/17/1367080939-14agd2.png";
   } else if (data.indexOf("Vous êtes à l'origine") >= 0) {
   dates[j].querySelector("a img").src = "http://image.noelshack.com/fichiers/2013/17/1367081255-14aig2.png";
   } else if (data.indexOf("effectué un boost") >= 0) {
   dates[j].querySelector("a img").src = "http://image.noelshack.com/fichiers/2013/17/1367073914-149xe2.png";
   } else if (data.indexOf("Autosignalement déjà effectué") >= 0) {
   dates[j].querySelector("a img").src = "http://image.noelshack.com/fichiers/2013/17/1367082905-14atu2.png";
   }
   });
}


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

正如您所看到的,它是一个非常简单的脚本。 $ .get有问题吗?我试过没有$ = unsafeWindow。$;但它也不起作用。

1 个答案:

答案 0 :(得分:2)

Tampermonkey支持正确的unsafeWindow,而Chrome用户脚本具有该名称的精简对象,通常是无用的。请参阅"Why is window (and unsafeWindow) not the same from a userscript as from a tag?"

我建议只支持Tampermonkey,而不是直接使用Chrome用户脚本。这提供了几个优点:

  1. 几乎完全支持the powerful Greasemonkey API

  2. 这意味着几乎所有Greasemonkey脚本都可以在Tampermonkey中按原样运行,并且有a lot of pre-built scripts out there

  3. 安装,创建,编辑,更新和维护Tampermonkey脚本要容易得多。特别是,现在Chrome已经“从我们的$ tore安装,或者!”用户脚本和成熟扩展的政策。

  4. Automatic and easy synching between machines如果您使用Chrome的同步功能。



  5. 如果您坚持支持裸Chrome,则必须inject代码。像这样:

    // ==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-*
    // ==/UserScript==
    
    function GM_scriptMain ($) {
        var dates   = document.querySelectorAll (".date");
        var urlBase = "http://image.noelshack.com/fichiers/2013/17/";
    
        function ddb (j) {
            var url = dates[j].getElementsByTagName("a")[0].href;
            $.get (
                url, function (data) {
                if (data.indexOf("Signalement déjà fait") >= 0) {
                    dates[j].querySelector("a img").src = urlBase + "1367080939-14agd2.png";
                } else if (data.indexOf("Vous êtes à l'origine") >= 0) {
                    dates[j].querySelector("a img").src = urlBase + "1367081255-14aig2.png";
                } else if (data.indexOf("effectué un boost") >= 0) {
                    dates[j].querySelector("a img").src = urlBase + "1367073914-149xe2.png";
                } else if (data.indexOf("Autosignalement déjà effectué") >= 0) {
                    dates[j].querySelector("a img").src = urlBase + "1367082905-14atu2.png";
                }
            } );
        }
    
        for (var k = 0, L = dates.length;  k < L;  ++k) {
            ddb (k);
        }
    }
    
    withPages_jQuery (GM_scriptMain);
    
    function withPages_jQuery (NAMED_FunctionToRun) {
        //--- Use named functions for clarity and debugging...
        var funcText        = NAMED_FunctionToRun.toString ();
        var funcName        = funcText.replace (/^function\s+(\w+)\s*\((.|\n|\r)+$/, "$1");
        var script          = document.createElement ("script");
        script.textContent  = funcText + "\n\n";
        script.textContent += 'jQuery(document).ready(function() {'+funcName+'(jQuery);});';
        document.body.appendChild (script);
    };