首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图从扩展包中的html窗口向内容脚本发送消息。

问试图从扩展包中的html窗口向内容脚本发送消息。
EN

Stack Overflow用户
提问于 2019-08-04 17:22:36
回答 1查看 476关注 0票数 0

我添加了一个新的(弹出) 窗户

不是您在清单中注册的popup.html。

用户将信息放在窗口中,当他们单击按钮时,需要将信息发送到content.js脚本。

(弹出)窗口的html位于扩展包中,因此不需要在manifest.json中添加“manifest.json”对象,而且它也不是其他扩展的一部分,因此不使用sendMessageExternal方法。

Manifest.json

代码语言:javascript
复制
    {
"name": "extension name",
"version": "0.1",
"options_page": "settings.html",
"manifest_version": 2,
"background": {
    "scripts": ["background.js"],
    "persistent": false
},
"content_scripts": [
    {
        "matches": ["<all_urls>"],
        "js":["jquery.min.js", "content.js"]
    }
],
"browser_action": {
    "default_popup": "popup.html",
    "default_title": "Default title",
    "default_icon": {
        "16": "images/logo16.png",
        "32": "images/logo32.png",
        "48": "images/logo48.png",
        "128": "images/logo128.png"
    }
},
"icons": {
    "16": "images/logo16.png",
    "32": "images/logo32.png",
    "48": "images/logo48.png",
    "128": "images/logo128.png"
        }
    }

Content.js

代码语言:javascript
复制
    chrome.runtime.onMessage.addListener(function(req, sender, senderres){
            if(req.succes == true){
            // Do stuff...
        }
    });

在(弹出)窗口中引用的js文件

代码语言:javascript
复制
  window.onload = function(){
    document.getElementById("BtnFinish").addEventListener('click',
    function(){
      chrome.runtime.sendMessage({succes: true});
      self.close();
    });
  }

这是我在background.js中用来创建(弹出)窗口的代码

代码语言:javascript
复制
    chrome.windows.create({
        url: chrome.runtime.getURL("form.html"),
        type: "popup"
    });

我确实收到任何错误信息。该按钮工作,它激活每一点代码,但content.js没有收到任何东西。

如果你还需要更多的信息,或者我忘了什么,那就随便问吧。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-04 17:31:38

如果您查看一下文档,其中有一个子句:

请注意,扩展不能使用此方法向内容脚本发送消息。若要向内容脚本发送消息,请使用tabs.sendMessage。

这意味着你必须做这样的事情:

代码语言:javascript
复制
chrome.windows.getAll({populate:true}, (windows) => {
  windows.forEach((window) => {
    window.tabs.forEach((tab) => {
      chrome.tabs.sendMessage(tab.id, {succes: true});
    });
  });
});

要做到这一点,您将需要tabs权限。我之所以使用chrome.windows.getAll,是因为您似乎试图向另一个窗口中的内容脚本发送消息,而不是同一个窗口的不同选项卡。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57348738

复制
相关文章

相似问题

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