Chrome扩展程序:“chrome.runtime.sendMessage”不起作用

Chrome Extension : "chrome.runtime.sendMessage" Is Not Working

提问人:Benroke 提问时间:11/11/2023 最后编辑:user229044Benroke 更新时间:11/18/2023 访问量:106

问:

我目前正在开发一个 Chrome 扩展程序,如果它在页面的 HTML 中找到特定单词,它将关闭我当前打开的选项卡。

我的内容 .js 脚本将在我打开的选项卡的 HTML 中找到禁止的单词(如果有的话),然后运行以下代码:chrome.runtime.sendMessage({request: "closeTab" })

我的背景 .js 脚本应该收到以下消息:chrome.runtime.onMessage.addListener(function closeTab(request, sender, sendResponse) {if (request == "closeTab") {//code});

我的内容 .js 脚本中的所有代码都运行正常并正在发送该消息。尽管如此,后台 .js 不会做任何事情。如果有人能告诉我原因,我将不胜感激。

*编辑:我不再有之前显示的错误消息。但是后台 .js 文件中的代码仍未运行。

*编辑:为了提供帮助,我截取了控制台的屏幕截图及其外观。控制台屏幕截图

以防万一你需要它,我会留下代码:

内容 .js

// content.js
const forbiddenText = "cheese";

//Program that looks for forbidden text
function checkForForbiddenText() {
  console.log("Checking for Forbidden Text.....");
  const bodyText = document.body.innerText;
  if (bodyText.includes(forbiddenText)) {
    console.log("Forbidden text found! Closing the tab...");
    chrome.runtime.sendMessage("closeTab")};
    console.log(chrome.runtime.sendMessage("closeTab"));
  }


// Run the checkForForbiddenText function when the page is fully loaded
window.addEventListener("load", checkForForbiddenText);

// background.js
chrome.runtime.onMessage.addListener(function closeTab(request, sender, sendResponse) {
    if (request.from === "closeTab") {
      // Close the current tab
      console.log("Background Running.....");
      chrome.tabs.remove(sender.tab.id)
          console.log("Tab closed");
        
    }
  });
  
  chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
    // Add any other logic you need for tab updates
    console.log("Tab updated:", changeInfo);
  });

manifest.json

{
"manifest_version": 3,
"name": "Test Blocker",
"version": "1",
"permissions": [
    "tabs",
    "activeTab"
],
"background": {
     "service_worker": "background.js"
},
"content_scripts": [
    {
        "matches": ["<all_urls>"],
        "js": ["content.js"]
    
}

] }

javascript 谷歌浏览器 google-chrome 扩展 chrome-extension-manifest-v3

评论

0赞 wOxxOm 11/11/2023
1) 删除 chrome.tabs.getCurrent,2) 使用 chrome.tabs.remove(sender.tab.id),3) 请注意,在 Chrome 中,您可以在内容脚本中使用 window.close() 关闭选项卡。
0赞 Benroke 11/12/2023
我已经完成了你建议的一切。我删除了chrome.tabs.getcurrent,但它仍然不起作用。不幸的是,使用 window.close() 不起作用,因为脚本无法以这种方式关闭选项卡,除非是打开它们的人。
0赞 Benroke 11/12/2023
但是我确实做了一些调试,现在我知道问题肯定涉及chrome.runtime.onMessage(),而不是其中的代码。
0赞 wOxxOm 11/12/2023
1) 替换为 in sendMessage。2) window.close() 在 Chrome 中的内容脚本中工作,无论谁打开了标签页。requestfrom
0赞 Benroke 11/12/2023
正如您建议的那样,我已经替换为 ,但现在它给了我一个错误,说我在 background.js 的第 6 行有一个匿名函数。||我还尝试在我的内容脚本中放入window.close(),一个错误告诉我:脚本可能只关闭它们打开的窗口。requestfrom

答:

0赞 Escape75 11/18/2023 #1
Change:
  chrome.runtime.sendMessage("closeTab")};
to:
  chrome.runtime.sendMessage({action:"closeTab"});

Change:
  if (request.from === "closeTab") {
to:
  if (request.action == "closeTab") {

还要检查 content.js 中的右大括号...