2012-05-24 7 views
1

Je n'arrive pas à comprendre pourquoi cela ne m'avertit pas au moins une fois quand je visite www.reuters.com. Est-ce que je manque quelque chose?

// ==UserScript== 
// @name  test3 
// @namespace test3 
// @version  1 
// ==/UserScript== 

$(document).ready(function() { 

    var actualHost = window.location.toString(); 
    var intendedHost = "www.reuters.com"; 

    alert("Debug 1 - " + actualHost); 

    if (actualHost == intendedHost) { 
     alert("Debug 2 - " + actualHost); 
    } 

}); 

Merci.

Répondre

1

ne fonctionne pas est une description vraiment mauvais d'un problème ..

de toute façon, je vois un problème ici. essayez ceci:

// ==UserScript== 
// @name        test3 
// @namespace   test3 
// @version     1 
// @include  *reuters.com* 
// ==/UserScript== 

loadDependancies(function() { 

    var actualHost = unsafeWindow.location.toString(); 
    var intendedHost = "www.reuters.com"; 

    alert("Debug 1 - " + actualHost); 


    if (actualHost == intendedHost) { 
        alert("Debug 2 - " + actualHost); 
    } 


}); 

Vous devez utiliser la directive @include qui indique GM où le script doit être exécuté. Vous devez utiliser unsafeWindow pour accéder à l'objet de la fenêtre de cette page

vous devez également charger jquery si elle ne marche pas existe déjà sur la page:

DEBUG = true 

function addScript(url){ 
    var s = document.createElement('script'); 
    s.src = url; 
    s.type = 'text/javascript'; 
    document.getElementsByTagName('head')[0].appendChild(s); 
} 

function log(msg){ 
    if(DEBUG){ 
    unsafeWindow.console && unsafeWindow.console.log(msg); 
    } 
} 

function loadDependancies(boostrapFn) { 

    addScript('jquery CDN url goes here..'); 

    var check = function(){ 
    log("waiting for dependancies to load: "+ typeof unsafeWindow.jQuery); 
    if(typeof unsafeWindow.jQuery == 'undefined'){ 
     window.setTimeout(check, 500); 
    } else { 
     jQuery = $ = unsafeWindow.jQuery; 
     boostrapFn(); 
    } 
    } 
    check(); 
} 

c'est votre nouveau script. il chargera jquery pour que vous puissiez utiliser

+0

Merci de votre contribution. Je veux dire qu'aucune des alertes ne se déclenche et je n'arrive pas à comprendre pourquoi. – derek8

+0

vous avez oublié la directive include. jetez un oeil à tout autre script de travail GM – mkoryak

+0

Hmm, toujours pas d'alerte pour moi. – derek8

6
  1. Pour utiliser jQuery, vous devez charger jQuery.
  2. $(document).ready() n'est pas requis dans la plupart des scripts Greasemonkey comme Greasemonkey fires at the appropriate time par défaut.

Ainsi, la version la plus simple du script devient:

// ==UserScript== 
// @name  test3 
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js 
// @grant GM_addStyle 
// ==/UserScript== 
//- The @grant directive is needed to restore the proper sandbox. 

var actualHost = window.location.toString(); 
var intendedHost = "www.reuters.com"; 

alert("Debug 1 - " + actualHost); 

if (actualHost == intendedHost) { 
    alert("Debug 2 - " + actualHost); 
} 

Note:

  1. Utilisez @require chaque fois que possible (ce qui est presque toujours).

    1. @require met une copie du script sur la machine locale, de sorte que votre script fonctionne plus rapidement et ne dépend pas d'un serveur externe pour chaque course.
    2. @require maintient la sécurité bac à sable/séparation, de sorte que votre script est à l'abri des effets secondaires ou des attaques de la page cible
    3. @require permet à votre fonction de script, même si vous avez désactivé tous le javascript de la page cible - un très précieux technique.
    4. @require même des ports à Chrome, si vous utilisez l'excellent Tampermonkey extension.



    Autres, alambiquée, des méthodes pour ajouter jQuery ont de multiples problèmes:

    1. Ils sont une Security risk inutile.
    2. Ils rendent votre script dépendant inutilement des serveurs externes pour chaque exécution!
    3. Ils ralentissent votre script.
    4. Ils font en utilisant les excellentes fonctions like GM_xmlhttpRequest() and GM_setValue() de GM, impossible ou beaucoup plus difficile.
    5. Ils lient votre script aux aléas de l'exécution JS de la page cible.


  2. Toujours donner votre script approprié @include, @exclude, and/or @match directives, de sorte qu'il ne fonctionne que sur la page souhaitée (s).

  3. Envisagez d'utiliser console.log() au lieu de alert(). C'est beaucoup moins intrusif pour le débogage.

+1

Beaucoup d'infos là-bas, merci – derek8

Questions connexes