繁体   English   中英

Chrome 扩展:function 必须在用户手势期间调用

[英]Chrome extension: function must be called during a user gesture

在 Chrome 扩展程序中,我想要求用户通过 browser_action 的弹出窗口链接(也就是带有链接的工具栏弹出窗口)完全访问页面。 当用户单击链接时,我收到此错误:

runtime.lastError while running permissions.request: This function must be called during a user gesture

然而,用户实际上点击了链接和“用户手势”。 关于如何调试被认为是用户手势的任何想法?

单击按钮时,我通过 chrome 的chrome.permissions.request api 请求完全访问权限:

$('#button-requestpermissions').click(function(){
  requestAmbientPermission(function(granted) {
    if (granted) {
      // code never reached as granted === false
    } 
  });
});

function requestAmbientPermission(callback){
    // Permissions must be requested from inside a user gesture, like a button's click handler.
    chrome.permissions.request({
      permissions: ['activeTab'],
      origins: ['<all_urls>']
    }, callback);
}

清单具有像这样设置的可选权限:

  "permissions": [
    "https://www.meethue.com/",
    "https://colorlovers.herokuapp.com/"
  ],
  "optional_permissions": [ 
    "activeTab",
    "<all_urls>"
  ],

来不及回答? 您只能从用户操作请求新权限,例如单击按钮:

document.querySelector('#my-button').addEventListener('click', function(event) {
    // Permissions must be requested from inside a user gesture, like a button's
    // click handler.
    chrome.permissions.request({
      permissions: ['tabs'],
      origins: ['http://www.google.com/']
    }, function(granted) {
      // The callback argument will be true if the user granted the permissions.
      if (granted) {
        doSomething();
      } else {
        doSomethingElse();
      }
    });
});

可以在这里找到详细的解释

即使代码在用户手势回调中,请求权限时也会出现错误。

runtime.lastError while running permissions.request: This function must be called during a user gesture

仅当我在执行 API 之前放置调试器时才会发生这种情况。 当我删除调试器并让 API 在没有任何中间阻塞的情况下执行时,它被纠正了。 对于任何调试,从那时起我就使用了 console.log。

我猜这是因为当调试器停止代码执行并且我们在调试模式下在浏览器上进行一些用户交互时,我们再次开始执行,chrome 决定此代码块与最后一次交互无关,因此不允许。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM