javascript - 如果没有 TamperMonkey,脚本将无法运行

标签 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.$;但它也不起作用。

最佳答案

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 的同步功能。

<小时/> <小时/>

如果您坚持支持裸版 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);
};

关于javascript - 如果没有 TamperMonkey,脚本将无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16702260/

相关文章:

google-chrome - 如何设置通知扩展 Chrome 的关闭时间

javascript - xmlhttprequest - 异常 101 错误

javascript - 检查数组中的值是否与选择框的值相同?

css - Google Chrome 浏览器中的文本垂直对齐错误

javascript - 如何在 Backbone.js 中组合具有相等值的 JSON 对象

javascript - 在 Chrome 工作的地方,Safari 调用 decodeAudioData 错误为 null

javascript - 如何在chrome中安装用户脚本(添加的脚本无法运行)?

javascript - Userscript - 有没有办法将 jquery 代码注入(inject)到 angularjs dom 中?

javascript - 导出默认值和导出{默认}之间的区别

javascript - HTML 模板呈现 - 奇怪的行为