首页 > 解决方案 > 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 时触发的脚本接收消息有任何建议?

标签: javascriptgoogle-chrome-extensionsvelte

解决方案


推荐阅读