【发布时间】:2019-07-08 01:50:51
【问题描述】:
我使用browser.tabs.executeScript 以编程方式将内容脚本注入网站。这将返回一个 Promise,但如果它被拒绝,似乎无法区分以下两种情况:
- 无法注入内容脚本(即缺少主机 许可)
- 脚本update解析end:update时出错(但正在注入脚本)
我只对脚本是否被注入感兴趣。
传递给catch 的参数是一个错误对象。
catch(e => console.log(e.toString()) 将输出错误消息,这可能是注入失败的原因(即Missing host permission)或发生错误更新读取脚本end:update.
browser.tabs.executeScript(tabId, {
file: '../path/to/content-script.js',
frameId: 0,
runAt: 'document_idle'
})
.catch(e => console.log(e.toString()));
所以,例如内容脚本如下:
window.document.body.addEventListener('click', e => console.log('clicked body'), false);
bla.bla();
那么 Promise 将被拒绝,因为 bla.bla 未定义 - 但脚本已成功注入。
如果无法注入内容脚本,我想用相应的错误消息通知用户。 但是当发生与是否可以注入脚本无关的错误update时end:update,在注入脚本时,我不想通知用户,但默默地处理它。 有没有办法区分这两种情况?
编辑:我想出了一个间接解决方案:如果返回的 Promise 被拒绝,我会尝试向内容脚本发送消息。如果这失败了,那么后台脚本“知道”没有内容脚本被注入 -> 通知用户。
【问题讨论】:
标签: firefox-addon firefox-addon-webextensions