javascript - Chrome 扩展消息 - 无法读取未定义的属性
问题描述
考虑以下代码:
在我的 Svelte 模板代码中,作为 await 函数的一部分,错误被捕获:
{:catch error}
<b>There was an Error</b>
<p>{error.message}</p>
{throwError()}
{/await}
在我的 Svelte 脚本标签中,我有一个处理该错误的函数,它向 chrome 扩展后台脚本发送一条消息:
function throwError() {
chrome.runtime.sendMessage(exID, {
message: 'removeIframe'
})
}
然后在后台脚本中触发以下内容:
chrome.runtime.onMessageExternal.addListener (
function(request, sender, sendResponse) {
if (request != null || request != undefined) {
dataFromApp = request;
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {
message: 'removeiFrame',
action: dataFromApp,
},
function(response) {
});
});
}
}
);
然后在我的内容脚本中,我有一些东西可以捕获该消息,例如:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
///do stuff
}
我的问题是这一切似乎发生得太快,并且在addEventListener
发送消息时不存在,所以我在background.js
控制台中收到此警告:
Error handling response: TypeError: Cannot read property 'id' of undefined
at chrome-extension://bkklcdioeabcfmcgkdfaodnmpiopkgnn/background.js:65:35
有没有人对如何确保addEventListener
内容脚本存在并准备好从 svelte 构建 ui 时触发的脚本接收消息有任何建议?
解决方案
推荐阅读
- hibernate - 如何从联接查询中获取计数 - 条件生成器
- swift - 如何使用 SwiftUI 获取鼠标位置?
- javascript - 循环连接内容文件
- c++ - 声明和定义类静态成员变量不会导致多次声明,这是为什么呢?
- jenkins - 当我单击 Jenkins 中的“立即构建”链接时,我只希望它构建一次,但它构建了两次
- amazon-web-services - AWS - 通过 Cloudformation 创建的 SSH 到 EC2
- amazon-cloudformation - AWS CloudFormation:使用 {{resolve}} 的具有动态引用的嵌套子会导致错误并且不执行解析以从 Parameter Store 获取值
- google-sheets - 用表格中的计算值填充二维网格的公式
- django - 无法在根目录中找到 base.html。怀疑模板加载器有问题
- sql-server - 按 DESC 排序 DATE 需要 NULL 值首先显示