1

2分ごとにタブをリロードする拡張機能を作成しようとしていますが、インターネットがオフラインの場合でもリロードを試してみたいと思います(オンに戻ったときにリロードします)。ウィンドウでエラーが発生した場合 (オフラインなど)、location.reload() を使用しても機能しないため、最適な方法は chrome.tabs.reload() を使用することであると考えました。

問題は、すべての chrome.tabs で同様のエラーが発生することです。空の引数で試してみると、ドキュメントに従って現在のタブがデフォルトになるため、動作するはずですが、代わりに:

chrome.tabs.reload({});
Uncaught TypeError: Cannot call method 'reload' of undefined 

現在のタブ ID を取得しようとすると、次のようになります。

chrome.tabs.query({currentWindow: true, active: true}, function (tabs) {
  console.log(tabs[0]);
});
Uncaught TypeError: Cannot call method 'query' of undefined 

同様に、すべてのシングルchrome.tabsに「未定義のxxyyzzを呼び出すことはできません」という同様のエラーがあります。Chrome が私のタブを認識できなかったようです。何が起こっているのでしょうか?

私のmanifest.jsは次のとおりです。

{
  "manifest_version": 2,

  "name": "test",
  "description": "",
  "version": "1.0",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "content_scripts": [
    {
      "matches": ["http://www.google.com/*"],
      "js": ["reload.js"],
      "run_at": "document_end"

    }
  ],
  "permissions": [
    "tabs","storage","http://www.google.com"
  ]
}
4

1 に答える 1

4

コンテンツ スクリプト内から アクセスすることはできませんchrome.tabs

[...] コンテンツ スクリプトにはいくつかの制限があります。彼らがすることはできません:

  • chrome.* API を使用する (chrome.extension の一部を除く)例 chrome.tabs
  • 拡張機能のページで定義された変数または関数を使用する
  • Web ページまたは他のコンテンツ スクリプトによって定義された変数または関数を使用する

[...]

Api メソッドを使用するには、 aBackground Pageを使用する必要があります。chrome.tabs

そしてそこから呼び出しreloadます。

更新:コンテキスト メニューのクリックでタブ (2 分) の自動再読み込みを切り替える
簡単なサンプルを追加しました。background.js出来るだけコメントしてみました

ネタバレ注意:自分自身の学習の練習(または同様のもの)としてこれを行う場合は、このリンクをクリックしないでください。

于 2013-03-18T14:55:55.173 に答える