首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >背景脚本:错误:无法建立连接。接收端不存在

背景脚本:错误:无法建立连接。接收端不存在
EN

Stack Overflow用户
提问于 2022-07-28 10:48:22
回答 2查看 1.1K关注 0票数 1

我试图在我的铬扩展名中从背景脚本发送消息到内容脚本。但是看起来消息是在加载内容脚本之前发送的吗?

这是我在正常使用扩展时遇到的错误:

代码语言:javascript
运行
复制
Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.

这是我的带有tabs.onUpdated函数的后台脚本:

代码语言:javascript
运行
复制
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {

    if (changeInfo.url) {
        console.log(changeInfo.url, tabId)
        chrome.tabs.sendMessage(tabId, {
            url: changeInfo.url,
            type: 'URL_CHANGE'
        });
    }
});

这是我的内容脚本接收功能:

代码语言:javascript
运行
复制
chrome.runtime.onMessage.addListener((obj, sender, response) => {
    console.log('received', obj)
    if (obj.type === 'URL_CHANGE') {
        console.log('testestsetst')
        getAuth()
        getUrlType(obj.url)
    } else if (obj.type === 'AUTH') {
        getAuth()
    } else if (obj.type === 'UN-AUTH') {
        removeAuth()
    }
});

每当我正常运行扩展时,我都不会看到我的内容脚本的输出,而且我得到了上面所述的错误。然而,当我调试后台脚本并逐步遍历代码时,我没有发现任何错误,并且我的内容脚本正确地打印了所有内容。这可能是因为需要加载的页面吗?如果是的话,我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-28 10:54:48

通过检查选项卡是否完成并通过tab参数发送url来解决这个问题,如下所示:

代码语言:javascript
运行
复制
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
    if (changeInfo.status === 'complete') {
        chrome.tabs.sendMessage(tabId, {
            url: tab.url,
            type: 'URL_CHANGE'
        });
    }
});
票数 1
EN

Stack Overflow用户

发布于 2022-11-21 17:32:25

background.js

代码语言:javascript
运行
复制
chrome.runtime.onInstalled.addListener(function (details) {
    if (details.reason == "install") {
        chrome.tabs.create({ url: chrome.runtime.getURL(`onboard-page.html`) }, function (tab) {
            chrome.tabs.onUpdated.addListener(function listener(tabId, changeInfo) {
                if (tabId === tab.id && changeInfo.status == 'complete') {
                    chrome.tabs.onUpdated.removeListener(listener)
                    // Now the tab is ready!
                    chrome.tabs.sendMessage(tab.id, "hello") 
                }
            });
        });
    } else if (details.reason == "update") {
        
    }
});

content-script.js

代码语言:javascript
运行
复制
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
    console.log(message)
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73151563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档