2013-05-22 4 views
0

사용자 스크립트를 작성 중이며 TamperMonkey로 설정할 때 작동하지만 Chrome 확장 프로그램에 수동으로 추가 한 경우에는 작동하지 않는 것으로 나타났습니다.TamperMonkey가 없으면 스크립트가 작동하지 않습니다.

나는 그것이 내가 만기가 된 것을 알고 있었으면 좋겠다. 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++; 
    } 

아주 단순한 스크립트입니다. $가 문제입니까? $ = unsafeWindow. $;없이 시도했습니다. 그러나 그것은 둘 다 작동하지 않습니다.

답변

1

Tampermonkey는 적절한 unsafeWindow을 지원하며 Chrome userscripts는 그 이름으로 쓸모가 없으며 대부분 쓸모없는 객체를 가지고 있습니다. "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에 "Install from our $ tore, 그렇지 않으면!"이 추가되었습니다. 사용자 스크립트 정책 및 본격적인 확장 기능.

  4. Automatic and easy synching between machines 크롬의 동기화 기능을 사용하는 경우



    당신이 알몸 크롬을 지원하는 주장하면

, 당신은 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); 
}; 
관련 문제