捕获chrome选项卡而不进行浏览操作

时间:2016-03-14 10:39:00

标签: javascript google-chrome google-chrome-extension chromium

我有一个捕获当前标签的简单方法,只有当点击扩展按钮(即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);

重要说明:我的扩展程序不是公共扩展程序,只能在我的浏览器上运行,因此我可以在启动时添加任何命令行开关(以便禁用此限制),如果需要

3 个答案:

答案 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