javascript - Chrome 扩展 : sending data to window created with chrome. windows.create

标签 javascript google-chrome google-chrome-extension

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

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

我已经尝试在窗口和选项卡对象上设置 fns 和 vars,但是一旦加载网络应用程序,它们就会以某种方式从窗口对象中丢失。 使用 chrome.tabs.executeScript 我可以摆弄 dom,但不能设置全局变量或“窗口”上的任何内容。

如果没有更好的方法,我想我不得不添加到 DOM 并在我的网络应用程序加载后选择它,但它看起来很乱。我希望有一个更简洁的方法,比如设置一个 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;
      }
    });

list .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/

相关文章:

javascript - 到达 id 时更改 CSS

javascript - 如何通过ajax使用多选过滤器

javascript - 检测未处理的鼠标事件

java - Chrome 放弃 NPAPI 后启动 webstart 的替代方法?

google-chrome-extension - chrome 扩展中的 angularjs 模板

Javascript内联显示跨浏览器的差异?

javascript - 使用街机物理功能时,斜坡在 Phaser 中不起作用

html - Android浏览器上的背景图片封面

google-chrome - Chrome 扩展程序 : close background page after closing Chrome

javascript - Chrome 扩展程序的指标