我正在努力寻找与我的网络应用程序进行通信的最佳方式,我在扩展程序中使用 chrome.windows.create 打开该应用程序。

我已经正确地连接了内容脚本和背景脚本。我可以右键单击一个元素并将其值发送到后台脚本,后台脚本会创建一个包含我的 web 应用程序的窗口。但是从那里我无法弄清楚如何在我的 web 应用程序中访问和使用该值(它需要将该值加载到编辑器中)。

我已经尝试在 window 和 tab 对象上设置 fns 和 vars,但是一旦加载了 web 应用程序,它们就会从 window 对象中丢失。
使用 chrome.tabs.executeScript 我可以摆弄 dom,但不能在 'window' 上设置全局变量或任何东西。

如果没有更好的方法,我想我不得不添加到 DOM 并在我的 Web 应用程序加载后选择它,但它看起来很困惑。我希望有一个更简洁的方法,比如设置一个 onLoadFromExtension fn,我的网络应用程序可以执行它来获取它需要的值。

最佳答案

我找到了一种经过多次反复试验后有效的方法,尽管它似乎仍然容易出错。并且它还取决于与已安装的扩展 ID 匹配的扩展 ID,因此如果无法对其进行硬编码,它将是另一条需要通过另一个 channel 的消息(阅读后,看起来可以进行硬编码,因为它是公钥的散列,所以问题解决了)......开始认为操纵 DOM 不那么困惑......

background.js :

var selectedContent = null;
chrome.runtime.onMessageExternal.addListener(
  function(request, sender, sendResponse) {
    console.info("------------------------------- Got request", request);
    if (request.getSelectedContent) {
      sendResponse(selectedContent);
    }
  });

网络应用程序 :
var extensionId = "naonkagfcedpnnhdhjahadkghagenjnc";
  chrome.runtime.sendMessage(extensionId, {getSelectedContent: "true"},
    response => {
      console.info("----------------- Got response", response);
      if(response) {
        this.text = response;
      }
    });

manifest.json :
"externally_connectable": {
  "ids": ["naonkagfcedpnnhdhjahadkghagenjnc"],
  "matches": ["http://localhost:1338/*"]
},

关于javascript - Chrome 扩展 : sending data to window created with chrome. windows.create,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35706031/

10-12 03:49
查看更多