50

ユーザーが拡張機能ボタンをクリックすると、別の Web サイトにリダイレクトする拡張機能を作成したいと考えています。これまでのところ、クリックごとに新しいタブを作成する拡張機能しか見たことがありません。

アクティブなタブを使用してユーザーを別の Web サイトにリダイレクトすることはできますか?

私はこのようなことを試しました:

chrome.browserAction.onClicked.addListener(function(tab) {
    var url = "https://www.mipanga.com/Content/Submit?url="
        + encodeURIComponent(tab.url)
        + "&title=" + encodeURIComponent(tab.title);

    document.location.href = url; // <-- this does not work
});
4

3 に答える 3

79

注意:クロスブラウザー拡張機能を開発する場合 (そうなってほしいです!)、 を使用することをお勧めしますchrome.tabs.query()詳細については、 Jean-Marc Amon の回答を参照してください。この回答は引き続き Firefox と Chrome の両方で機能しますがquery()、より一般的に使用され、より多くのオプションがあり、バックグラウンド ページとポップアップ ビューで機能します。

APIから、、、またはchrome.tabsを使用できます。getCurrent()query()update()

今のところ、update()これにより、他に多くのことをする必要なく現在のタブを更新できるため、私はそれを好みます。注意:コンテンツ スクリプトから
は使用できません。update()

queryコンテンツ スクリプトから URL を更新する必要がある場合は、代わりに使用する必要があります。Jean-Marc Amon の回答は、この場合にアクティブなタブを取得する方法の素晴らしい例を提供します (彼に賛成票を投じることを忘れないでください!)。

update()

let myNewUrl = `https://www.mipanga.com/Content/Submit?url=${encodeURIComponent(tab.url)}&title=${encodeURIComponent(tab.title)}`;
chrome.tabs.update(undefined, { url: myNewUrl });

ここでは、update の最初の引数を undefined に設定しています。これは、更新するタブ ID です。未定義の場合、Chrome は現在のウィンドウの現在のタブを更新します。

詳細については、ドミノの回答を参照してください。また、必要ないupdateことにも注意してください。undefined繰り返しますが、役立つと思われる場合は、回答にも賛成票を投じることを忘れないでください。

getCurrent()

getCurrentまた、タブ以外のコンテキスト (背景ページやポップアップ ビューなど) から呼び出すこともできません。

現在のタブを取得したら、単に を渡しupdate()ます。

chrome.tabs.getCurrent(function (tab) {
  //Your code below...
  let myNewUrl = `https://www.mipanga.com/Content/Submit?url=${encodeURIComponent(tab.url)}&title=${encodeURIComponent(tab.title)}`;

  //Update the url here.
  chrome.tabs.update(tab.id, { url: myNewUrl });
});

注意:この機能を使用するには、ファイルで権限が有効になっていることを確認する必要があります。tabs manifest.json

"permissions": [
  "tabs"
],
于 2009-12-12T22:45:54.817 に答える
45

chrome.tabs.query も使用できます

chrome.tabs.query({currentWindow: true, active: true}, function (tab) {
      chrome.tabs.update(tab.id, {url: your_new_url});
});
于 2015-03-19T15:19:04.950 に答える
13

タブ ID が渡されない場合、chrome.tabs.updateメソッドは現在アクティブなタブで自動的に実行されます。

tabsこれには、許可を必要としないという追加の利点があります。この権限を持つ拡張機能は、閲覧履歴を読み取ることができることをユーザーに警告するため、必要がない場合は要求しないようにしてください。

現在のタブの URL を変更するには、次のように書くだけです。

chrome.tabs.update(undefined, {url: 'http://example.com'});

または、コメントで farwayer が述べたように、2 つの引数を入れる必要はまったくありません。

chrome.tabs.update({url: 'http://example.com'});
于 2017-01-04T23:50:39.900 に答える