2017-02-27 24 views
0

私はChrome拡張機能を開発中です。私はページにスクリプトを注入し、スクリプトにも使用できるようにjqueryを注入しています。Jquery - 上書きされないようにする方法

Boomerangという別の拡張を追加して以来、jqueryは定義されていません。これまでに試したこと:

myJquery = jQuery.noConflict(); 

時にはうまく動作しないことがあります。コンソールでmyJqueryをチェックすると、時々存在することがあり、時には未定義です。つまり、$またはJQueryです。レースの状態?すべての私の資産を待っている機能で

jQuery.noConflict(); 

は動作します(私はそれらを見つけるまでチェックするために `のsetIntervalで)注入される同じ - 時々はい時々いいえ。

私はちょっと考えがありません。 Boomerangが問題の根源だと思われますが、ここで発生した場合は、他の拡張機能でも発生する可能性があります。自分の関数を自分の名前空間などに定義することを知らない方法はありますか?

[EDIT] 私はブーメランのコードを逆コンパイルして、彼らが私とまったく同じスタックを使用しているを発見:Gmail.jsとjQueryを。ここで私はここに障害があると信じて自分のコードである:

function h() { 
    V = String(document.location); 
    "undefined" === typeof window.jQuery && 0 > V.indexOf("ContactManager") ? Eb = 
     setTimeout(h, 500) : (a = ia = window.jQuery.noConflict(!0), window.b4g.$ = a, setTimeout(Lc, 0), setTimeout(z, 0)) 
} 

私は本当にこのwindow.jQuery.noConflict(!0)の意味を理解していないが、それは良い見ていない...

+2

jquery.jsを編集し、デフォルトの変数名を完全に一意に変更します。 – wOxxOm

+0

ねえ、ありがとう。しかし、私はそれを行うことはできません - 私はプラグインを使用していて、彼らはMyLovelyJponeyではなくjQueryを呼び出しています:) –

+2

問題はnoConflict'ed jQuery名を考慮しないプラグインによって引き起こされたようです。プラグインも編集できます。 – wOxxOm

答えて

0

だから、私はそれを働きましたまわり。ここに私がしたことがあります。私はjQueryとその依存関係の注入を遅らせ、メインスクリプトのみを注入しました。また、再帰的なsetTimeoutを使用すると、カスタムイベントdocument.dispatchEvent(new CustomEvent("eventName", {}))を使用してcentent_scriptファイルを呼び出して、注入されたスクリプト自体からjQueryを挿入できました。 content_scriptがこれを取得すると、jQueryがページに挿入され、メイン関数をトリガするために使用する別のカスタムイベントが送出され、jqueryを使用してDOMに挿入する必要があります。

関連する問題