2012-02-12 15 views
1

ロードする前にドキュメントに挿入したいスクリプトがあります。 I.E。それは私が正しく実行されるクロム内のスクリプト(私は警告することができます(0)など)を作っているが、それは私が欲しいものではありませんどの異なる環境で実行doc startでChrome拡張機能を実行する

<script..>MYSCRIPT HERE</script> 

<html> 
. 
. 

かのように機能するはずです。私はそれをページと同じ環境で実行したい。

以前、私は、起動スクリプトでは、私は効果的に実行環境を変更する

window.location="javascript:<MY SCRIPT HERE>" 

を使用していたトリックを使用していたが、ここ数日のためにそれが機能していません。私はそのクロムバグを修正すると思います。これには他の回避策がありますか?注:document.bodyなどが利用できないため、起動スクリプトのページにスクリプトタグを動的に追加することはできません。

これと私の以前の解決策がなぜ必要なのか、さらに詳しくお伝えしたいと思います。

. 
. 
<script> 
function a(){//DOSOMETHING} 
</script> 
. 
. 
<script> 
a(); <<------ I DONT WANT TO CALL THIS 
</script> 

プレシャスソリューション::「」ページの再宣言のエラーを強制します

window.location='javascript:const a=function(){};';<<-CONST used!! 

^^を含むJavaScript スタートアップ私はオーバーコントロールを持っていない HTMLページ実際にはロードされるので、a()が呼び出されると何も起こりません。 (賢い、右?-_-)

しかし、今私はwindow.location = "js:.."を実行すると、別のenvで実行されることを実現しました!

ヘルプ! :)

答えて

0

でご利用いただけます。しかし、はい、クロムエクステンションを使って "ドキュメント"に物事を注入する方法についての多くの洞察があります。ポストのためのありがとうマイク。次回私がgreesemonkeyなどを使って注射しているときは、そのことを覚えておいてください:)

3

あなたのコンテンツスクリプトを介してscriptタグを追加することで、ページのJavaScriptコンテキストにスクリプトを挿入できるはずです。このスクリプトタグは、ページのコンテキストではなく、スクリプトのコンテキストで実行されるだろう、とあなたができるようにする必要があり

var s = document.createElement('script'); 
s.textContent = 'const a = function() {};'; 
document.documentElement.appendChild(s); 

:他の言葉では、あなたのスクリプトはdocument_idleで注入することができ、のようなものを実行しますあなたが探している結果を達成してください。一般的には、コンテンツスクリプトの

ドキュメントは、パエスが指摘したようにクロムは、おそらく現在のビルドにバグがありhttps://developer.chrome.com/extensions/content_scripts

+1

答えは、「ドキュメントの読み込み時に注入する」から「ドキュメント開始時に注入する」に変更する必要があります。偉大なものthoは、ドキュメントの開始(私は過去にそれを行う方法を知りたかった)で動作します。 – PAEz

+0

公正なポイント。私は 'idle'を意味するために' load'を使いこの手に使いましたが、ドキュメントの開始時に本当にスクリプトを挿入する必要があれば、絶対にそのオプションを持っています。 :)私は私の答えを更新します。 –

+0

返事ありがとう、マイク、解決しようとしましたが、問題は解決しません:( テスト: 。 。 開始スクリプト: s = document.createElement( 'script'); s.innerText = 'const a = function(){};'; document.documentElement.appendChild(s); スクリプト内で本体に追加されますが、関数 "a"は再宣言されています。たとえば、関数の名前を "b"に変更すると、chromeスクリプトコンソールを使用してページの "b"にアクセスできますが、 "a"は上書きされています。この動作を防ぐための方法はありますか? – Akshay

関連する問題