0

私は例と参考文献を探していましたが、何も思いつきませんでした。offscreenTabのソースコードに、バックグラウンドページからインスタンス化できないことを示すメモが見つかりました(offscreenTabに関連するタブがありません)。他の場所では、ポップアップもタブとは関係がないという言及を見つけました。

Chrome拡張機能でoffscreenTabを正常に作成するにはどうすればよいですか?

4

1 に答える 1

1

ドキュメントによるとoffscreenTabs.create、バックグラウンドページでは機能しません。明示的には言及されていませんが、APIはコンテンツスクリプトでも使用できません。簡単なテストでは、ポップアップには背景ページと同じ制限があるようです。

残りのオプションは、Chrome拡張機能のコンテキストで実行されるタブだけです。これを行う最も簡単な方法は、バックグラウンド/ポップアップで次のコードを使用することです。

chrome.tabs.create({url: chrome.extension.getURL('ost.htm'), active:false});
// active:false, so that the window do not jump to the front

ost.htmタブを作成するヘルパーページです。

chrome.experimental.offscreenTabs.create({url: '...'}, function(offscreenTab) {
    // Do something with  offscreenTab.id !
});

URLを変更するには、を使用しますchrome.experimental.offscreenTabs.update

offscreenTab.idはtabIdであり、chrome.tabsAPIで使用する必要があります。ただし、少なくともChrome 20.0.1130.1では、そうではありません。APIのすべてのメソッドはtabs、返されたtabIDを認識しません。

回避策は、マニフェストファイルを使用してコンテンツスクリプトを挿入することです。例:

{"content_scripts": {"js":["contentscript.js"], "matches":["<all_urls>"]}}
// contentscript.js:
chrome.extension.sendMessage({ .. any request .. }, function(response) {
    // Do something with response.
});

背景ページの付録:

chrome.extension.onMessage.addListener(function(message, sender, sendResponse) {
    // Instead of checking for index == -1, you can also see if the ID matches
    // the ID of a previously created offscreenTab
    if (sender.tab && sender.tab.index === -1) {
        // index is negative if the tab is invisible
        // ... do something (logic) ...
        sendResponse( /* .. some response .. */ );
    }
});

コンテンツスクリプトを使用すると、ページのDOMに完全にアクセスできます。しかし、グローバルオブジェクトではありません。ページのコンテキストでコードを実行する場合は、スクリプトを挿入する必要があります(この回答を参照)。

役に立つかもしれないもう一つのAPIはchrome.webRequestAPIです。ヘッダー/中止/リダイレクトリクエストを変更するために使用できます。注:応答の読み取りまたは変更には使用できません。

現在、offscreenTabsAPIは実験的なものです。それを試すには、を介して実験的なAPIを有効にし、マニフェストファイルにchrome://flags追加する必要があります。"permissions":["experimental"]実験的ではなくなったら、を使用します"permissions":["offscreenTabs"]

于 2012-07-06T11:14:54.950 に答える