-1

ユーザー スクリプトをプログラムしましたが、Chrome で問題が発生しました (Greasemonkey を使用した Firefox は問題ありません): Tampermonkey を使用しています。コードは次のとおりです。

// Header...

(function addjQuery() {
    var head = document.getElementsByTagName('head')[0] ;
    var jQuery = document.createElement('script');

    jQuery.type = 'text/javascript';
    jQuery.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';

    head.appendChild(jQuery);
    waitjQuery() ;
 })();

function waitjQuery(){
    typeof jQuery == 'undefined' ? setTimeout(waitjQuery, 50) : main() ;
}

私のスクリプトは関数待機でループし、typeof jQuery(または $...) は常に未定義です。コンソールでページのヘッダー HTML を確認したところ、jQuery が正しく読み込まれています...

4

2 に答える 2

2

Google Chrome 拡張機能はサンドボックス化されています。したがって、DOM に追加した jQuery はスクリプトで使用できません。拡張機能内で jQuery を使用する場合は、マニフェスト ファイルでそれを定義する必要があります。ページのドメインでスクリプトを実行する場合は、ページ内に jQuery が存在する後にスクリプトを挿入する必要があります。

したがって、jQuery が存在するかどうかを確認する必要はなく、jQuery を含むスクリプト要素が追加されているかどうかを確認する必要があります。

于 2013-02-11T17:42:37.827 に答える
0

スクリプトが Greasemonkey で機能したのはまぐれでした。Greasemonkey API のいずれかを使用しようとするとすぐに (GM_関数)、機能しなくなります。これは、Greasemonkey が愚かなことに、選択した条件でサンドボックスをオフにし、スクリプト コードがページ スコープとスクリプト スコープを混在させている (危険な行為) ためです。

Chrome は賢明にもサンドボックスをオフにしないため、コードはそこで機能しません。しかしさらに、Tampermonkey の場合、そのように jQuery を追加したくありません!
を使用して jQuery を追加し@requireます。これにより、スクリプトがより速く、より安全になり、ページ上の何かが壊れたり壊れたりする可能性が低くなります。

jQuery を追加するための優れたクロスブラウザー手法 (利用可能な場合に使用する) は、この回答@requireの 2 番目の部分にあります。

于 2013-02-11T21:36:54.343 に答える