Google chrome extension 我无法在内容脚本和弹出窗口之间进行双向通信

Google chrome extension 我无法在内容脚本和弹出窗口之间进行双向通信,google-chrome-extension,Google Chrome Extension,我无法在内容脚本和弹出窗口之间进行双向通信 我可以与内容脚本进行通信,因此发出警报“收到的消息正在显示” 但反馈警报“已收到响应”未显示。但当我检查弹出窗口,然后单击按钮时,会显示“收到响应”警报 我的问题是,为什么我需要检查弹出窗口以获得反馈警报“收到响应”?如何在不检查弹出窗口的情况下获得响应 弹出式HTML <!doctype html> <html> <head> <title>activity</title> &l

我无法在内容脚本和弹出窗口之间进行双向通信

  • 我可以与内容脚本进行通信,因此发出警报“收到的消息正在显示”

  • 但反馈警报“已收到响应”未显示。但当我检查弹出窗口,然后单击按钮时,会显示“收到响应”警报

我的问题是,为什么我需要检查弹出窗口以获得反馈警报“收到响应”?如何在不检查弹出窗口的情况下获得响应

弹出式HTML

<!doctype html>
<html>
<head>
    <title>activity</title>
<script src="jquery.js"></script>
</head>
<body>
    <button id="clickactivity">click</button>
    <script src="popup.js"></script>
</body>
</html>  
 <!doctype html>
    <html>
    <head>
        <title>activity</title>
    <script src="jquery.js"></script>
    </head>
    <body>
        <button id="clickactivity">click</button>
        <script src="popup.js"></script>
    </body>
    </html>  
内容脚本JS

$(document).ready(function () {
    chrome.runtime.onMessage.addListener(
      function (request, sender, sendResponse) {
          if (request.sender == "Hi") {   
             alert("Message Received");
              sendResponse({ receiver: "Hello" });
          }
      });
});

你知道关闭(未显示)时弹出窗口不存在吗?我不确定你是否如问题所示在每个页面中注入,但除非你需要,否则请不要将jQuery加载到每个页面中。jQuery是85kiB的最小化代码。这是一个沉重的负担,每一页都要负担。我们这些打开100个标签的人怎么办?虽然您可能真的需要加载jQuery,但问题是它可以通过不使用普通JavaScript在您自己的代码中保存几百个字符。如果是这种情况(我们无法知道),那么从用户的角度来看,这样做是一个非常糟糕的权衡。注意:在当前代码
$(文档)中。准备好了吗(
是不必要的。您注入脚本的方式已经保证它们在触发
DOMContentLoaded
后被注入。如果您的用户交互开始于用户单击
browserAction
按钮,则应注入内容脚本,而不是manifest.json
content\u脚本
条目。这样,您的内容脚本就不会被插入到每个页面中等待使用,从而加重浏览器的负担。使用
chrome.tabs.executeScript()
,脚本可以在注入时开始运行。查看
chrome://extensions/
?如果是,它将不起作用。在安装/重新加载/启用扩展后,您是否重新加载了正在查看的选项卡?如果没有,它将不起作用。您知道关闭时弹出窗口不存在吗ed(未显示)?我不确定您是否像问题中所示在每个页面中注入,但除非您需要,否则请不要将jQuery加载到每个页面中。jQuery是85kiB的最小化代码。这对每个页面来说都是一个巨大的负担。我们这些打开了100个选项卡的人怎么办?虽然您可能真的需要加载jQuery,问题是,不使用普通JavaScript可以在您自己的代码中保存几百个字符。如果是这样(我们无法知道),从用户的角度来看,这样做是一个非常糟糕的权衡。注意:在您当前的代码中
$(文档)。准备好了吗(
是不必要的。您注入脚本的方式已经保证它们在触发
DOMContentLoaded
后被注入。如果您的用户交互开始于用户单击
browserAction
按钮,则应注入内容脚本,而不是manifest.json
content\u脚本
条目。这样,您的内容脚本就不会被插入到每个页面中等待使用,从而加重浏览器的负担。使用
chrome.tabs.executeScript()
,脚本可以在注入时开始运行。查看
chrome://extensions/
?如果是,它将不起作用。在安装/重新加载/启用扩展后,是否重新加载了正在查看的选项卡?如果没有,它将不起作用。
function injectTheScript() {
    chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
        chrome.tabs.sendMessage(tabs[0].id, { sender: "Hi" }, function (response) {
            if (response.receiver == "Hello") {
                alert("Response recieved");
            }
        });
    });
}
document.getElementById('clickactivity').addEventListener('click', injectTheScript);
$(document).ready(function () {
    chrome.runtime.onMessage.addListener(
      function (request, sender, sendResponse) {
          if (request.sender == "Hi") {   
             alert("Message Received");
              sendResponse({ receiver: "Hello" });
          }
      });
});