10

そこで、指定した URL でタブがリロードされたときにスクリプトを実行したいと思います。ほとんど機能しますが、実際には id は機能しません:) これは私のマニフェストファイルです:

{
"manifest_version": 2,

"name": "Sample Extension",
"description": "Sample Chrome Extension",
"version": "1.0",

"content_scripts":
[
    {
      "matches": ["http://translate.google.hu/*"],
      "js": ["run.js"]
    }
],

"permissions":
[
    "activeTab",
    "tabs"
],

"browser_action":
{
    "default_title": "Sample",
    "default_icon": "icon.png"
}
}

そしてこれはrun.jsです:

chrome.tabs.onUpdated.addListener(
function ( tabId, changeInfo, tab )
{
    if ( changeInfo.status === "complete" )
    {
        chrome.tabs.executeScript( null, {file: "program.js"} );
    }
}
);

programs.js は、(まだ) いくつかのテキストを警告するだけです。run.js の最初の行にアラートを入れるとアラートが出ますが、if に入れると出ません。問題が見つかりません。何か間違って入力しましたか?

4

3 に答える 3

13

http://translate.google.hu/*ページがリロード時にコードを挿入したいページであると仮定すると、少し異なる方法でそれを行う必要があります。現在、あなたは常にそれらのページにコードを挿入しており (そうする許可なしに、それ以下ではありません)、chrome.tabsそのコンテンツ スクリプト内で API を使用しようとしていますが、これはできません。代わりに、リスナーをバックグラウンド ページに配置し、必要に応じてページの更新時にのみコードを挿入します。まずマニフェスト:

{
  "manifest_version": 2,
  "name": "Sample Extension",
  "description": "Sample Chrome Extension",
  "version": "1.0",
  "background": {
    "scripts": ["background.js"]
  },
  "permissions":[
    "http://translate.google.hu/*", "tabs"
  ]
}

background.js

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){
  if (tab.url.indexOf("http://translate.google.hu/") > -1 && 
      changeInfo.url === undefined){
    chrome.tabs.executeScript(tabId, {file: "program.js"} );
  }
});

onUpdatedこれはイベントをリッスンし、url挿入したい の 1 つであるかどうかを確認し、ページがリロードされたかどうかを確認します。その最後のステップは、changeInfo.url存在するかどうかを確認することによって達成されます。表示されている場合は、URL が変更されたため、更新されていないことを意味します。逆に、存在しない場合は、ページが更新されただけである必要があります。

于 2013-06-06T01:17:16.797 に答える
4

content_scriptsはすべてのページ (再) 読み込みで実行されるため、それらを使用して検出するのが最善です。

このようにして、メッセージを受信する準備が整うbackground前にコードを実行するリスクもありません。content_script

于 2016-06-27T10:52:52.470 に答える