首页 > 解决方案 > 如何知道在谷歌浏览器扩展中发送的弹出消息

问题描述

我正在编写一个 Google Chrome 扩展程序,现在我正在发送这样的弹出消息:

chrome.tabs.query(
    {
        active: true,
        currentWindow: true,
    },
    (tabs) => {
        const tabId = tabs[0].id;
        getConfig((conf) => {
            config = conf;
            chrome.runtime.sendMessage(
                null,
                {
                    text: 'getAllRSS',
                    tabId: tabId,
                },
                (feeds) => {handleCallback(feeds);}
            );
        });
    }
);

Google Docs 告诉我chrome.runtime.sendMessage会发送消息到content.js,但是当我调试页面并发现消息被发送到background.js,然后被发送到content.js时,后台似乎收到了消息并忽略了内容。那么为什么消息首先由后台处理呢?消息传递的规则是什么?我如何知道消息将传递到后台或内容?这是后台js:

chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
    if (sender.tab && sender.tab.active) {
        if (msg.text === 'setPageRSS') {
            handleRSS(msg.feeds, sender.tab.id);
        } else if (msg.text === 'addPageRSS') {
            addPageRSS(msg.feed, sender.tab.id);
        }
    }
    if (msg.text === 'getAllRSS') {
        console.info("获取RSS地址:" + getAllRSS(msg.tabId));
        sendResponse(getAllRSS(msg.tabId));
    }
});

content.js还定义:

chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
    if (msg.text === 'getPageRSS') {
        sendResponse(getPageRSS());
    } else if (msg.text === 'getHTML') {
        sendResponse(document.documentElement.innerHTML);
    }else{
        sendResponse(document.documentElement.innerHTML);
    }
});

标签: javascriptgoogle-chrome-extension

解决方案


推荐阅读