当侦听器位于background.js时,从脚本中调用侦听器 - chrome extension

时间:2017-12-06 13:23:41

标签: javascript google-chrome google-chrome-extension chrome-runtime

我创建了我的扩展程序。

我创建了一个content.js文件,在页面中注入了我的脚本"。

 var SE = document.createElement('script');
  SE.src = chrome.extension.getURL('SE.js');
  (document.head || document.documentElement).appendChild(SE);
在SE.js文件中的

我得到了这个脚本。在我的seExtID中,它是我的chrome扩展ID,因为如果我没有传递seExtID,我会收到此错误:

未捕获错误:从网页调用的chrome.runtime.connect()必须为其第一个参数指定扩展ID(字符串)

所以我将我的extentionID传递给sendMessage方法

chrome.runtime.sendMessage(seExtID, {
      method: "LoadSettings"
    },
      function (config) {
        defaultSettings = config;
      });

在我的background.js文件中

chrome.runtime.onMessage.addListener(
    function (request, sender, sendResponse) {
      debugger;
      switch(request.method){
        case "SaveSettings":
          var se_json = request.settings;
          localStorage.setItem("se_settings", se_json);
          break;
        case "LoadSettings":
          var obj = JSON.parse(localStorage.getItem("se_settings"));
          sendResponse(obj);
          break;
      }


    }
);

问题是,如果我从default_popup或者content.js调用我的SendMessage,那就是它的工作。

在content.js或default_popup中,执行的上下文可能已经存在,因此不需要seExtID。我可以通过seExtID调用我的发送消息,以及它的工作:

chrome.runtime.sendMessage( {
      method: "LoadSettings"
    },
      function (config) {
        defaultSettings = config;
      });

如果我查看文档https://developer.chrome.com/extensions/runtime#method-sendMessage

string(可选)extensionId

要将邮件发送到的扩展程序/应用的ID。如果省略,邮件将发送到您自己的扩展程序/应用程序。如果从网页发送消息以进行Web消息传递,则必需。

我可能会错过一些东西......有人可以帮我这个吗?

0 个答案:

没有答案