如何使用实验offscreenTab API?(How to use the experimenta

2019-09-19 03:55发布

我一直在寻找示例和参考,并纷纷拿出什么。 我发现一张纸条,在offscreenTab源代码提它不能从后台页面实例化(它没有一个标签为offscreenTab涉及到)。 在其他地方,我发现提的是弹出式也有不系领带的标签。

你如何成功地创建一个Chrome扩展的offscreenTab?

Answer 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.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"]



文章来源: How to use the experimental offscreenTab API?