offscreenTabs
API(現在は実験的)をご覧ください。
を使用してタブを作成した後、またはをchrome.experimental.offscreenTabs.create
使用して、好きなことを行うことができます。chrome.tabs.sendMessage
chrome.tabs.executeScript
インスピレーションが必要な場合は、この完全なデモを確認してください。
仕様により、オフスクリーンタブは実際のタブ内でのみ作成できます(そうしないと、「experimental.offscreenTabs.create中にエラーが発生します:現在のタブが見つかりません」)。他のデモでは、この目的のためにオプションページを使用しました。このようなページを使用したくない場合は、を使用して新しいタブを作成し、必要な操作を行ってからchrome.tabs.create
、を使用window.close()
してタブを閉じます。
したがって、結局(非表示の)タブを開くことになります(ただし、ページ自体は表示されません)。現在のAPIでは、タブを開かずに非表示のタブをレンダリングする方法は他にありません(バックグラウンドページのiframeでページをレンダリングする場合を除く...)。実際のタブがタブバーに表示されてもかまわない場合は、を使用してchrome.tabs.create({active:false, url:'...'})
ください。タブをユーザーに本当に見えないようにすることが重要な場合は、次のデモに進みます。
offscreenTabsAPIを使用したデモ
この例では、非表示のタブのタイトルを含むアラートを表示します。コンテンツスクリプトからこのアラートをすぐに表示できますが、代わりに、データをバックグラウンドページに渡して、機能をデモンストレーションします。
バックグラウンドスクリプト(background.js
):
chrome.extension.onMessage.addListener(function(message, sender, sendResponse) {
var tab = sender.tab;
if (tab && tab.index === -1) { // <-- Detect offscreen tab
if (message.method == 'title') {
// Close helper tab:
chrome.extension.sendMessage({method: 'finishedTab', id: tab.id});
alert('Got title from ' + tab.url + ' :\n' + message.result);
}
}
});
chrome.browserAction.onClicked.addListener(function() {
chrome.tabs.create({
active: false,
url: chrome.extension.getURL('launcher.html')
});
});
コンテンツスクリプト(contentscript.js
):
chrome.extension.sendMessage({
method: 'title',
result: document.title
});
launcher.html
が含まれています<script src="launcher.js"></script>
。launcher.js
:
var offscreenTabId;
// Close the tab when the stuff is done
chrome.extension.onMessage.addListener(function(message) {
if (message.method == 'finishedTab' && message.id === offscreenTabId) {
window.close();
}
});
// Create invisible tab
var createProperties = {url: "https://stackoverflow.com/"};
chrome.experimental.offscreenTabs.create(createProperties, function(offscreenTab) {
offscreenTabId = offscreenTab.id;
});
マニフェストファイル:
{
"name": "Get information from DOM in an invisible tab",
"description": "See https://stackoverflow.com/q/13714002",
"version": "1",
"manifest_version": 2,
"permissions": ["experimental", "<all_urls>"],
"background": {"scripts": ["background.js"] },
"content_scripts": [{
"js": ["contentscript.js"],
"matches": ["<all_urls>"]
}],
"browser_action": {}
}