2017-03-23 11 views
0

ウェブサイトではjQueryスクリプトが実行されています。私はクロムエクステンションを使用して、サイトが自分のバージョンのjQueryスクリプトを実行し、通常のものではないようにしたいと考えています。Chrome拡張機能を使用したjQueryスクリプトの置き換え

これまでのところ、私はウェブサイトが通常のスクリプトを呼び出して、私は自分でそれを置き換えてきたところChromeの拡張機能を見つけ作ることができた:試験として

document.querySelector("script[src^='website.com/originaljqueryscript']").src = 'myjqueryscript'; 

、私はmyjqueryscript製オリジナルのjqueryscriptとまったく同じスクリプト。マニフェスト内のrun_atをdocument_endで実行するように設定しました。

スクリプトを有効にしてWebサイトを開こうとすると、コンソールにエラー$(...).dialog is not a functionが記録されました。これは、jQueryがクロム拡張機能に読み込まれていないためです。それで、ウェブサイトが使用しているjQueryのバージョンを見つけて、それを私のクロムエクステンションに追加しました。今私はこのエラーが表示されます:$(…).dialog is not a function私はエラーが2つのjQuerys(Webサイト上の1つ、私の拡張から1つ)が読み込まれている間の競合のためだと思う。

私は適切なトラックにいるのでしょうか、またはウェブサイトのjQueryスクリプトを自分のものと置き換える良い方法がありますか?

+2

jQueryはIIFEと定義されているため、ロードされた直後に動作します。 jQueryを削除しても、ブラウザの更新がない限り、コンテンツはキャッシュされます。それをリフレッシュすると、同じことが再び起こります。 –

+0

ありがとう、ありがとう。私は元のスクリプトは常に読み込まれるので、ライブWebサイト上でjqueryスクリプトを "置き換える"という私の計画はかなり可能ではないと思います。 – user2461391

+0

はい。しかし、必要ならば、すべてのjQuery CDNをブロックして、独自のjQueryファイルを追加することができます –

答えて

1

特定のURLからjQueryをロードする場合は、webRequest APIを使用してjQueryへのリクエストをインターセプトし、エクステンションにバンドルされているファイルにリダイレクトすることができます。例:

chrome.webRequest.onBeforeRequest.addListener(
    function(details) { return {redirectUrl: chrome.runtime.getUrl("js/myjquery.js")}; }, 
    {urls: ["https://example.com/js/jquery.js"]}, 
    ["blocking"] 
); 

(注:このサンプルは非常に最小限であり、あなたは、元のページには、あなたの標的部位であることを確認するリクエストヘッダを含めると、検査する必要があるかもしれない - あなたが本当にCDN-を交換したくありません

これは、ウェブサイトがSubresource Integrityのチェックを使用しないことを前提としていますが、script-srcコンテンツセキュリティポリシー(リダイレクトは透過的)をバイパスすると考えています。


.dialog()はjQueryのUIではなく、コアのjQueryの一部である。なお、恐らく両方のサイトにロードされ、両方を傍受する必要があります。サイトが実際に一緒にバンドルする可能性があります。

+0

'document_start'でMutationObserverをロードして、'

関連する問題