我有一个捕获当前标签的简单方法,只有当点击扩展按钮(即browserAction)触发此方法时,它才有效。
但是当我在setTimeout事件中使用此方法时,它失败并出现以下错误:
Unchecked runtime.lastError while running tabCapture.capture: Extension has not been invoked for the current page (see activeTab permission). Chrome pages cannot be captured.
我的简单捕获方法是:
function captureTab() {
var constraints = ...
chrome.tabCapture.capture(constraints, function (stream) {
if (!stream) {
console.error("couldn't record tab");
return;
}
// recording succeeded
});
}
当触发如下时它起作用:
chrome.browserAction.onClicked.addListener(function () {
chrome.tabs.getSelected(null, function (tab) {
captureTab();
});
});
但在触发时不会工作:
setTimeout(function () {
chrome.tabs.getSelected(1, function (tab) {
captureTab();
});
}, 1 * 30 * 1000);
重要说明:我的扩展程序不是公共扩展程序,只能在我的浏览器上运行,因此我可以在启动时添加任何命令行开关(以便禁用此限制),如果需要
答案 0 :(得分:2)
请注意,只有在调用扩展程序后才能在当前活动的标签页上启动chrome.tabCapture.capture。
捕获当前活动标签的可见区域。只有在调用扩展名后,才能在当前活动的选项卡上启动捕获。
当您声明activeTab权限时,只有以下用户手势才能启用
- 执行浏览器操作
- 执行页面操作
- 执行上下文菜单项
- 从命令API
执行键盘快捷键- 接受多功能框API的建议
因此,当您使用setTimeOut
时,无法确保当前标签处于活动状态。
答案 1 :(得分:1)
我知道这很奇怪我在接受了不同的答案之后回答了我自己的问题,但是......
我有一个解决方案,只有当你可以将开关注入chrome时才可以应用,在我的情况下可以如上所述:
重要提示:我的扩展程序不是公共扩展程序,只能在我的浏览器上运行,因此我可以在启动时添加任何命令行开关(以便禁用此限制),如果需要的话。
所以诀窍是使用带有扩展名id的下面的开关:
--whitelisted-extension-id="abcdefghijklmnopqrstuvwxyz"
希望有一天这会有所帮助。
答案 2 :(得分:-1)
有效的方法是用户操作调用您的扩展程序(有人点击某些内容告诉Chrome它可以,因为用户需要它)。
这暂时授予扩展名“activeTab”权限,这也是它正常工作的原因。 (https://developer.chrome.com/extensions/activeTab)
要使其按预期工作(没有自动引入activeTab权限的操作),您需要在扩展程序的权限部分声明它,例如:
"permissions": [
"tabs",
"bookmarks",
"http://www.blogger.com/",
"http://*.google.com/",
"unlimitedStorage",
"activeTab"
],
请参阅https://developer.chrome.com/extensions/declare_permissions