仅使用activeTab权限检查当前标签页是否为chrome:// newtab

时间:2018-10-29 08:15:21

标签: javascript google-chrome-extension firefox-addon

在我创建的Chrome扩展程序中,我正在尝试实现以下逻辑:

  • 如果在执行用户操作(基于activeTab权限)之后可以将内容脚本插入当前页面,则显示上下文菜单项。
  • 否则,不要显示它。

但是,在MDN和Chrome文档中都进行了上下搜索之后,我无法找到内置API对此进行检查。

我当前的解决方法如下(将webextension-polyfill用于基于承诺的Optimizer.minimize() API):

browser

这感觉很hacky,但在几乎所有情况下都可以使用。失败的一种情况是选项卡URL为const checkAvailability = () => { const getTabInfo = browser.tabs.query({active: true, currentWindow: true}); const getErrorInfo = browser.tabs.executeScript({ code: '' //noop }).then(res => null, err => err); return Promise.all([getTabInfo, getErrorInfo]).then((info) => { const [tabs, err] = info; const permissionsNotRequestedMsg = 'Cannot access contents of the page. Extension manifest must request permission to access the respective host.'; return !err || (err.message === permissionsNotRequestedMsg && tabs[0].url !== 'chrome://newtab/'); // on new tab page, `permissionsNotRequestedMsg` is always shown; on other pages, // this error simply means user has not yet initiated any extension-related action; // any other error message means the page cannot be accessed by extensions }); }; 并且尚未启动任何用户操作。在这种情况下,chrome://newtab/不会返回有关URL的信息,因此tabs.querytabs[0].url

有什么办法可以解决这个限制?或者,如果用户从undefined访问扩展名的尝试失败,而又未在清单中请求更多权限,是否可以向用户显示消息?

0 个答案:

没有答案