2016-07-17 15 views
0

拡張スクリプトのアクションを実行:は、新しいタブを開くと、新しいタブ

function newtab() { 
    chrome.tabs.create({"url":domain,"selected":true}, function(tab) { 
     //-- 
    }); 
} 

私の拡張スクリプトでは、私はいくつかのドメインで新しいタブを開いています。その新しいタブのdomがロードされているかどうかを確認し、新しいタブのdomでいくつかの操作を実行したいのですが、

私は、Chrome拡張機能のドキュメントを確認し、それを達成するための任意の適切な方法を見つけることができませんでした。

は私の導光してくださいう。

+0

[chrome.tabs.executeScript](https://developer.chrome.com/extensions/tabs#method-executeScript)を使用してください。このメソッドを紹介する多くの答えがあるので、たくさんの例を見つけることができると思います。 – wOxxOm

+0

ありがとう@wOxxOm :) –

+0

シンプルな例の例:[特定のタイプの要素の数を確認する方法](http://stackoverflow.com/a/30380827) – wOxxOm

答えて

1

Content Scriptsは、DOMを変更/アクセスできる拡張の一部でしかありません。

あなたは、新しく開いたタブにコンテンツスクリプトを追加するために、いわゆるProgrammatic Injectionを使用することができます。

function newtab() { 
    chrome.tabs.create({"url":domain,"selected":true}, function(tab) { 
     chrome.tabs.executeScript(tab.id, {file: "content_script.js"}); 
    }); 
} 

.executeScript()はデフォルトdocument_idleのこと、run_at parameterの対象となります。これにより、の静的 DOMが完全にロードされた後にのみスクリプトが実行されることが保証されます。

動的DOM(静的コンテンツがロードされた後にページのスクリプトがDOMをさらに作成する)の場合、でもと定義されていても「タブが読み込まれています」という状態は問題です。 Listening to DOM changesあなたを助けることができます。

ノートのカップル:新しいページへの

  • プログラムによる注入は、ページのhost permissionsが必要です。あらかじめドメインがわからない場合は、"*://*/*""<all_urls>"などの広範な許可が必要です。
  • "document_idle"は、例えば、すべてのリソースがロードされていることを保証するものではありません。 <img>タグが既に存在する可能性がありますが、イメージはまだ読み込まれていません。詳細とアドバイスについては、run_atのドキュメントを参照してください。
  • .executeScript()のコールバックを使用することができます。これは、返信をスクリプトに渡す最も簡単な方法ですが、signature of the expected callbackを理解していることを確認してください。
+0

ありがとうございます@ Xan。私はこの問題を解決しましたが、あなたの答えはとにかく非常に有益でした:) –

関連する問題