0

最初の拡張機能を作成しようとして Chrome をいじっています。基本的に、特定のドメインで DOM 操作を行うスクリプトを作成したいと考えています。さらに、ユーザーがその特定のドメインにアクセスしたときに、アドレスバーに表示されるアイコンを介してスクリプトを切り替えることができるようにしたいと考えています。

これまでのところ、私はこのmanifest.jsonを持っています:

{
  "manifest_version": 2,

  "name": "Ekstrafri",
  "description": "Removes annoying boxes for paid articles.",
  "version": "1.0",
  "page_action": {
    "default_title": "Foobar"
  },
  "content_scripts": [
    {
      "matches": ["http://ekstrabladet.dk/*"],
      "js": ["jquery.min.js", "cleaner.js"],
      "run_at": "document_end"
    }
  ]
}

cleaner.jsいくつかのものを削除するいくつかの jQuery DOM セレクターが含まれています。

現在のセットアップは機能しますが、コンテキスト スクリプトが常に挿入されます。ユーザーがページのリロードを受け入れるか拒否する確認プロンプトをトリガーする必要があるトグルをユーザーができるようにしたい。

とにかく、page_actionアイコンが表示されないようです。ドキュメントによると、アドレスバーにアイコンが表示されるはずです。

2 つの質問があります。

  1. 一致したコンテンツにこの page_action アイコンを表示するにはどうすればよいですか?
  2. イベントをそのアイコンにバインドするにはどうすればよいですか?
4

1 に答える 1

0

ここでできることの 1 つは、メッセージパッシング フレームワークを使用して、background.js ページで変数を取得および設定することです。基本的に、コンテンツ スクリプトが実行されると、バックグラウンド スクリプトにアクセスしてブール変数の状態を確認できます。その後、残りのスクリプトを実行するかどうかを決定できます。

chrome.extension.sendMessage({ cmd: "runScript" }, function (response) {
   if (response == true) {
     //Run the rest of your script inside here...
   }
});

また、この初期呼び出しを使用してページ上の UI をバインドし、この状態を切り替える (つまり、コンテンツ スクリプトのオン/オフを切り替える) こともできます。この例では、チェックボックスを使用しています。

$("chkOnOff").click(function(){

   var scriptOn  = ($(this).is(":checked");

   chrome.extension.sendMessage({ cmd: "updateRunScriptState", data: { "scriptOn" : scriptOn  }  }, function (response) {
       //Update confirmed
   });

});

background.js ページは次のようになります。

//Global variable in background.js
var scriptOn = true;

chrome.extension.onMessage.addListener(
function (request, sender, sendResponse) {
    if (request.cmd == "runScript") {
        sendResponse(scriptOn);
    }

    if (request.cmd == "updateRunScriptState") {
        //here we can update the state
         scriptOn = request.data.scriptOn;
    }
});

マニフェストに background.js ページを登録することを忘れないでください。

..
  "background": {
    "scripts" : ["background.js"]
  },
..
于 2013-06-19T09:10:37.587 に答える