Chrome扩展程序的activeTab权限问题

use*_*691 3 google-chrome google-chrome-extension

我在Chrome扩展程序的background.js脚本中运行以下代码:

chrome.browserAction.onClicked.addListener(captureCurrentTab());

function handleCapture(stream) {
  console.log('content captured');
  console.log("backround.js stream: ", stream);
  alert(stream);

  // localStream = stream; // used by RTCPeerConnection addStream();
  // initialize(); // start signalling and peer connection process
}

function captureCurrentTab() {
  console.log('reqeusted current tab');
  chrome.tabs.query({active : true}, function(tab) {
      console.log('got current tab');

      chrome.tabCapture.capture({
          audio : true,
          video : false
      }, handleCapture);
  });
}    
Run Code Online (Sandbox Code Playgroud)

但是,这给了我以下错误:

runtime.lastError运行时未选中tabCapture.capture:当前页面未调用扩展(请参见activeTab权限)。Chrome页面无法捕获。

但是,我专门在manifest.json中授予activeTab权限:

"permissions": [
    "tabs",
    "tabCapture",
    "activeTab",
 ]
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

abr*_*ham 5

Chrome pages cannot be captured.表示您正在尝试捕获chrome://chrome-extension://或类似的 Chrome 特定页面,但这是不允许的。确保当前页面是http://https://

  • 这个说法是正确的,但是如果您还解释一下为什么“当前页面”是这样一个 URL,将会更有帮助。问题的代码中有一些明显的问题导致了此错误。 (2认同)
  • 对于其他遇到此问题的人来说,如果您在调用 capture 方法时打开了 background.js 脚本的检查器窗口,则会出现此错误。 (2认同)

小智 5

activeTab许可声明,你只有当用户执行暗示他们希望你能够访问某些动作可以访问在当前选项卡。

以下用户手势启用activeTab:

  • 执行浏览器动作
  • 执行页面动作
  • 执行上下文菜单项
  • 从命令API执行键盘快捷键
  • 接受来自多功能框API的建议

该错误告诉您捕获当前选项卡,因为用户尚未执行上面列出的操作之一。

看来您可能已经了解了这一点,但是代码中只有一个错误。注册captureCurrentTab为浏览器操作的点击侦听器时,实际上实际上是在立即执行它,而不是通过引用传递函数。将第一行更改为此:

// Remove the () after captureCurrentTab
chrome.browserAction.onClicked.addListener(captureCurrentTab); 
Run Code Online (Sandbox Code Playgroud)