2012-01-09 10 views
0

Personalized-Web(Chrome拡張機能)を使用してコンテンツスクリプトでjavascriptコマンドを実行しようとしています。私はjavascriptの& jqueryのに新たなんだけど、私はこのコードを入力することを発見しました:特定のページに私のブラウザバーにブラウザバーのJavaScriptとコンテンツスクリプトの比較 - 'die'が機能しない

javascript:jQuery("div.photo-container").die(); 

は望ましい結果を達成し:それは、ページのの1で行われる.live呼び出しを取り消しjavascripts。

ただし、同じコードまたは$("div.photo-container").die();をコンテンツスクリプトに含めると機能しません。私はまた、ページのコンテキストで、このスクリプトタグを含むしようとしました:

<script type="text/javascript"> 
    $("div.photo-container").die(); 
</script> 

とクロムは$またはjQueryが定義されていないと主張しています。しかし、ページ自体のJavaScriptはincludeではありません。または、私が知る限り、いつでもjQueryのソースを参照してください。

ブラウザバー、コンテンツスクリプト、ページ内<script>タグの違いは何ですか? 「自動」の方法(ブラウザバーに貼り付けない)を使用するにはどうすればよいですか?

+0

最初の例が機能するには、ある時点でjQueryがロードされている必要があります。ページには他のスクリプトはありません。本当に「」の最後にはありませんか? – PPvG

+0

@PPvG - ページ全体に多くのスクリプトが散在しています。私はjQueryがロードされたかどうかを見つけるためにそれらを捜していたはずですか? – keflavich

+0

いいえ、申し訳ありませんが、私はあなたの最初の行を読んでいました。 [Mohammedの回答](http://stackoverflow.com/a/8796140/990877)をご覧になり、[Chromeのコンテンツスクリプト](http://code.google.com/chrome/extensions/content_scripts.html)のドキュメントをお読みください。 。 – PPvG

答えて

2

スクリプトタグをページに挿入すると、そのスクリプトタグが機能するはずです。例:

// Runs in the context of the webpage. 
var injectScript = function() { 
    $("div.photo-container").die(); 
} 

// Runs in the context of the content script. We basically just append the DOM 
// with the injected script and execute it so it will run. 
var script = document.createElement('script'); 
script.appendChild(document.createTextNode('(' + injectScript + ')();')); 
document.body.appendChild(script); 

上記は、あなたのページで$が定義されていると仮定して動作するはずです。 $が存在しない場合は、jQueryがまだロードされていないことを意味します。マニフェストにdocument_endも定義されていることを確認してください。ウェブデザイナーが非同期スクリプトやコンテンツをロードしているので、

... 
"content_scripts": [ 
    { 
    "matches": ["http://www.rim.com/*"], 
    "js": ["content_script.js"], 
    "run_at": "document_end" 
    } 
], 
... 

それはウェブサイトに応じて、時々その後、動作しない場合は、コンテンツ(スクリプト)までの遅延ロードまたはスマート負荷に良いですがロードされます。その場合は、jQueryのロード方法を調べるためにいくつかの調査を行います。たとえば、setTimeoutのタイマーやDOMイベントを実行して、注入を実行するタイミングを把握します。 Google+拡張機能などの難しいウェブサイトで何度もやっています。

+0

ありがとうございます。あなたのソリューションはまさに私が探していたものです。しかし、今私は次のエラーを取得します: 'Uncaught TypeError: 'null'のメソッド 'die'を呼び出すことはできません。それは動作します( 'live'関数が' die'dする必要があります)が、まだこのエラーがあります。大したことではない、私はただ何も壊さないようにしたい。 – keflavich

+0

'die()'がどういう意味か分かりません。 'console.log($( 'div.photo-container'))'を試してみて、それが出力されているかどうか確認してください –

関連する問題