Script ok with Greasemonkey but does not work with Tampermonkey. Is it because of jQuery $.get?

google-chrome, greasemonkey, javascript, jquery, tampermonkey

Solution

If you want to use jQuery version that is embedded on this website, you need to refer to it with `unsafeWindow`. In other words: you need to define `$` as `unsafeWindow.$` at the beginning of your userscript. Here's fixed code:

// ==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++;
}

Problem

I made a script for Greasemonkey on Firefox, it works perfectly, but nothing happens on Chrome with Tampermonkey. I know that Chrome restricts the use of jQuery. I especially found this interesting post : How can I use jQuery in Greasemonkey scripts in Google Chrome? I tried the solutions but I still can not get my script to run on Google Chrome. I do not really see what's wrong with my script, because it is really short. What could be the problem? This is the script I'm trying to run (I shortened it but I am obliged to leave much since I do not know where is the problem): ``` // ==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++; } ``` The only thing that can be a problem is $.get, is not it? I tried different solutions, ask loading jQuery before executing my script, I tried with the proposed template but it definitely did not work, and I do not see why.

Original source

Related problems