我一直在寻找示例和参考,并纷纷拿出什么。 我发现一张纸条,在offscreenTab源代码提它不能从后台页面实例化(它没有一个标签为offscreenTab涉及到)。 在其他地方,我发现提的是弹出式也有不系领带的标签。
你如何成功地创建一个Chrome扩展的offscreenTab?
我一直在寻找示例和参考,并纷纷拿出什么。 我发现一张纸条,在offscreenTab源代码提它不能从后台页面实例化(它没有一个标签为offscreenTab涉及到)。 在其他地方,我发现提的是弹出式也有不系领带的标签。
你如何成功地创建一个Chrome扩展的offscreenTab?
根据该文件, 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.tabs
API。 然而,至少在Chrome 20.0.1130.1,这是情况并非如此。 在所有方法tabs
API不承认返回tabID。
一个解决办法是使用一个注入一个脚本内容清单文件 ,例如:
{"content_scripts": {"js":["contentscript.js"], "matches":["<all_urls>"]}}
// contentscript.js:
chrome.extension.sendMessage({ .. any request .. }, function(response) {
// Do something with response.
});
Appendum到后台页面:
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.webRequest
API。 它可以用来修改页眉/失败/重定向请求。 注意:它不能被用来读取或修改响应。
目前, offscreenTabs
API是实验性的。 要玩它,你必须使通过实验的API chrome://flags
,并添加"permissions":["experimental"]
你的清单文件。 一旦这不是实验的任何更多,使用"permissions":["offscreenTabs"]