在我创建的Chrome扩展程序中,我正在尝试实现以下逻辑:
但是,在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.query
是tabs[0].url
。
有什么办法可以解决这个限制?或者,如果用户从undefined
访问扩展名的尝试失败,而又未在清单中请求更多权限,是否可以向用户显示消息?