我正在努力寻找与我的网络应用程序通信的最佳方式,我在我的扩展程序中使用 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/