2011-10-23 28 views
1

サードパーティのウェブサイトでChromeアプリケーションを開発しています。ページの読み込み前にChrome拡張挿入スクリプト

私は変更しようとしている文書は、次のページの形式になっています。

<head> 
. 
.meta data here 
. 
</head> 
<body> 
    <script type="text/javascript"> 
    function a1(){ 
     ..contents of function a1 
    } 
    </script> 

    . 
    .other contents of body 
    . 
    <script type="text/javascript"> 
    a1(); // <-- I don't want this to be executed 
    </script> 
</body> 

私の問題は、私はページ全体が関数呼び出しA1(除いて、ロードしたいです)。

私は単純な解決策を考えました。関数a1(){..}では、何もしない定数としてa1を作成したいので、a1()呼び出しを役に立たないようにします。

問題は、私のjsでrun_at document_startが定数であると定義すると、実行環境が異なるため、ページには影響しません。 innerHTMLのを使用して

だから、同じ実行環境で実行するための代替がINJECTによってコードです+ =「...」

別の代替は、 『のcreateElement』を使用してスクリプト要素を構築することであるとSRCは外部JSです実行前にロードしなければならないファイル。

run_at document_startスクリプトで解析ツリーが作成されないため、どちらの方法も機能しません。

私は他の解決策を考えました。私はDOMModifySubTreeイベントのリスナーを追加し、解析シーケンスを変更したいと思っています(私は知っています、それは面白いと思います:))、関数が呼び出されないようにします。助けにならない。

私の質問はどのようにしてa1()関数の呼び出しを防ぐのですか? P.S - 第三者のウェブサイト開発者に連絡することはできません。

+0

「サードパーティのウェブサイトでのクロムアプリケーション」とは、1つのサードパーティサイトで使用するためのクロム拡張機能、クロムブラウザのみをターゲットとするウェブアプリケーションなどを指しますか? –

答えて

0

ご迷惑をおかけしました。私が最初に関数呼び出しをスキップするために行ったことは、ドキュメントの開始時にスクリプトを実行し、JSを別のenviで実行するときに "ドキュメント"に挿入したことです。関数が再宣言されているとき、私は

const a1=function(){}; 

をこのように使用されたものを注入するスクリプトでは、それは(すなわち、それは私たちのダミー関数を実行している)ので、関数が実行されていない、上書きされません基本的に壊すので、コード。 :)

1

Greasemonkeyはあなたが探しているものです。
は自分のスクリプトをあなたが選択したWebページに挿入するFirefox拡張機能です。
wiki.greasespot.netにアクセスすると、スクリプトの作成を開始できます。

多分、ChromeはネイティブにGreasemonkeyスクリプトをサポートしています。詳細はthis pageを参照してください。

+1

私は代わりを見つけました。とにかくありがとう。解決策は私の古い考え方に似ていました。私はwindow.location = "javascript:const a1 = function(){};"を使用しました。 – Akshay

+0

@Akshayあなたの解決策(プラス関連コード)を回答として投稿し、それを受け入れます。将来のSOユーザーはあなたのソリューションが役立つかもしれません。 –

+0

再定義しようとしていることについて具体的な詳細はわかりませんが、再定義エラーは 'a1()'が*本来*定義されているのと同じブロックでコードが実行されないように注意する必要があります。だから、あなたはページ上のいくつかの機能を壊すかもしれません。 – galambalazs

関連する問題