3

何かを動かしたいのですが、グーグルの「孤立した世界」について完全に混乱しています。たくさん検索しましたが、自分のニーズに対する答えが見つかりません。ワークフロー: ユーザーが拡張機能のアイコンをクリックします -> JavaScript が DOM ツリーで div "xpto を検索し、そのコンテンツを取得します -> このコンテンツを使用して、新しいタブで Google 検索を行います。

マニフェスト.json

{
  "manifest_version": 2,
  "name": "searchongoog",
  "description": "test",
  "version": "1.0",
  "permissions": [ "tabs",
    "https://*/*","http://*/*","activeTab"
  ],    
  "content_scripts": [
    {
      "matches": ["https://*/*","http://*/*"],
      "js": ["background.js"],
      "run_at": "document_end"
    }
  ],
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  }
}

これで情報を取得できますが、ページを開くたびに自動的に完了します。拡張機能のアイコンがクリックされたときにのみ background.js を実行する必要があります。popup.html 内で background.js を呼び出そうとしましたが、検索する情報を抽出するための DOM にアクセスできません。

どんな助けでも素晴らしいでしょう。

PS: 私はこれについて完全に初心者なので、完全に間違っている場合は非難しないでください。

とにかくありがとう

4

1 に答える 1

6

「パターン一致インジェクション」の代わりに「プログラムによるインジェクション」を試すことができます。

プログラマティック インジェクションは、パターンに一致するすべてのページにコードを挿入したくない場合に特に便利です。たとえば、ユーザーがブラウザのアクション ボタンをクリックしたときにコードを挿入する必要があります。

「プログラムによる注入」を実装する方法を示す簡単な例を書きました。

最初に、「ブラウザー アクション」クリック イベント リスナーを登録するためのバックグラウンド ページを追加する必要があります。

マニフェスト.json

{
  "manifest_version": 2,
  "name": "searchongoog",
  "description": "test",
  "version": "1.0",
  "permissions": [ "tabs",
    "https://*/*","http://*/*","activeTab"
  ],
  "background":{
    "persistent":false,
    "page":"background.html"
  },
  "browser_action": {
    "default_icon": "icon.png"
  }
}

ブラウザ アクションのクリック リスナーを登録します (injector.js は、DOM を検索し、新しいタブの Google 検索用のコンテンツを取得するスクリプトです)。

注: ブラウザー アクションにポップアップがないことを確認してください。ポップアップがある場合、このイベントは発生しません。

background.html

<script>
chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(null,{file:"injector.js"});
});
</script>

インジェクター.js

alert("Programmatic injection!");

デモのスナップショット:

ここに画像の説明を入力

これがお役に立てば幸いです。

于 2013-11-11T06:09:35.383 に答える