2011-08-02 29 views
1

私は以下のような簡単なGreasemonkeyのスクリプトを持っている:私はJavaScriptを実行する場合なぜこのChrome/Greasemonkeyスクリプトは実行されていませんか?

// ==UserScript== 
// @name MetaCPAN Everywhere 
// @description Add to every link to CPAN a link to MetaCPAN on a Google results page. 
// @namespace http://ajct.info 
// @match http://*/* 
// @version 0.1 
// ==/UserScript== 

(function() { 

    var page_links = document.links; 
    for (var i=0; i<page_links.length; i++){ 
     if (page_links[i].href.match(/http:\/\/search\.cpan\.org\/perldoc\?(.*?)$/i)) { 
      var match = page_links[i].href.match(/http:\/\/search\.cpan\.org\/perldoc\?(.*?)$/i); 
      var span = document.createElement("span"); 
      span.innerHTML = "&nbsp; <a href=\"http://www.metacpan.org/module/"+match[1]+"\">MetaCPAN</a>"; 
      page_links[i].parentNode.insertBefore(span, page_links[i].nextSibling); 
     } 
    } 

})(); 

は放火魔を通じてスニペットそれが正しいことを行いますが、私はそれをインストールして、検索結果のページをご覧あれば、スクリプトを実行していないようです。

おそらく何か些細なことだと思いますが、私が逃したものは誰でも指摘できますか?

答えて

1

と呼ばれています、しかし、私は完全にGreasemonkeyのスクリプトをサポートしているChromeの拡張機能を見つけた、本当に簡単であるが、いくつかのスクリプトは、クロムで実行しないことを発見した、Googleのajaxes-でちょうど約すべての結果が表示されるので、最初のバッチを待ち、後のバッチをチェックする方法が必要です。

多くの手法があります。

//--- This handles both page-load delays, and AJAX changes. 
var chkInterval = setInterval (checkForResultsLinks, 500); 

function checkForResultsLinks() { 
    var links = document.querySelectorAll ('#search a'); 
    if (links) { 

     for (var J = links.length - 1; J >= 0; --J) { 
      var link = links[J]; 

      if (link.weHaveProcessed) 
       continue; 

      if (link.href.match (/http:\/\/search\.cpan\.org\/perldoc\?(.*?)$/i)) { 
       var match = link.href.match (/http:\/\/search\.cpan\.org\/perldoc\?(.*?)$/i); 
       var span = document.createElement("span"); 
       span.innerHTML = "&nbsp; <a href=\"http://www.metacpan.org/module/"+match[1]+"\">MetaCPAN</a>"; 
       link.parentNode.insertBefore (span, link.nextSibling); 
       link.weHaveProcessed = true; 
      } 
     } 
    } 
} 


注:

  1. Googleの検索結果が "検索"、idを持つdivの内側に表示されるシンプルなものは、タイマーを使用することです。
  2. この種類のスクリプトに// @run-at document-endディレクティブを追加することをお勧めします。
  3. 現在のスクリプトの@match指令が広すぎると、スクリプトはすべてのWebページで起動します! (function() { ... })();:のように、匿名関数内のコードをラップする必要はありませんかポイントがありません

    // @match http://www.google.com/* 
    // @match http://google.com/* 
    

  4. あなたはおそらくそれを制限したいです。

+0

私は実際には馬鹿で、キャッシュされた壊れたバージョンをインストールしていました。鉱山は機能しますが、これはもっと徹底的に見えるので、私はそれに行きます。 –

関連する問題