【问题标题】:Chrome screenshot works only when extension is clicked firstChrome 屏幕截图仅在首先单击扩展程序时有效
【发布时间】:2014-09-21 23:21:05
【问题描述】:

所以我尝试编写一些代码,以便在我的网站上按下按钮时截取页面的屏幕截图。该代码有效,但唯一的问题是我必须先单击 chrome 扩展,然后我可以单击按钮以截取屏幕截图。我想那是因为未调用活动选项卡。有什么想法吗?

这是错误信息:

运行 tabs.captureVisibleTab 时未检查 runtime.lastError:“activeTab”权限无效,因为尚未调用此扩展。

ma​​nifest.json

"permissions": [
    "tabs",
    "*://google.com/*"
  ],

background.js

var id = 100;

// Listen for a click on the camera icon. On that click, take a screenshot.
function takeScreenshot() { 

  chrome.tabs.captureVisibleTab(null, function(screenshotUrl) {
    .....
}

chrome.extension.onRequest.addListener(function(request, sender) {
  takeScreenshot();
});

contentscript1.js

contentScriptMessage = "Take a screenshot";

document.addEventListener("hello", function(data) { //When overlay is clicked
    chrome.extension.sendRequest({message: contentScriptMessage}); //call background script
})

当点击图像时,我会从网页传递一条消息(调用函数 go()),如下所示:

  var go = function() {
          var event = document.createEvent('Event');
          event.initEvent('hello');
          document.dispatchEvent(event);
          }

【问题讨论】:

    标签: javascript google-chrome-extension


    【解决方案1】:

    运行 tabs.captureVisibleTab 时未检查 runtime.lastError:“activeTab”权限无效,因为尚未调用此扩展。

    此错误意味着如果没有明确的用户手势(例如单击您的扩展程序),您的扩展程序没有足够的权限访问当前选项卡。我必须说这里的错误非常具有误导性,因为您的清单中没有 activeTab 权限。

    文档提到您need specifically the "<all_urls>" permission 是为了在不显式调用的情况下使用此功能。有关要求的说明,请参阅 this bug

    【讨论】:

    • 另请注意,某些 API,包括 tabs.captureVisibleTab,不能用于受限域/页面,例如:chrome.google.com/webstore/category/extensions,或其他扩展页面,即使使用 @987654328 @ 许可! 在这些页面上,activeTab 是让它们工作的唯一方法(但同样,并非所有 API,例如您仍然无法使用 executeScript)。
    • @icl7126 是否有一份列表记录了受限制的域/页面是什么?
    • @CamHart 我不这么认为。正如您所看到的here,事情可能会因版本而异。最好的方法是自己测试。但总的来说,预计会出现以下问题:about:blankchrome://*chrome-extension://*https://chrome.google.com/webstore
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2022-08-13
    相关资源
    最近更新 更多