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