Chrome扩展程序:将数据发送到使用chrome.windows.create创建的窗口
Chrome extension: sending data to window created with chrome.windows.create
我正在努力寻找与我的Web应用程序进行通信的最佳方式,我在扩展中使用chrome.windows.create打开了该应用程序。
我已经正确处理了内容脚本和后台脚本之间的连接。我可以右键单击一个元素并将其值发送到后台脚本,后台脚本会创建一个包含我的 Web 应用程序的窗口。但是从那里我无法弄清楚如何在我的 Web 应用程序中访问和使用该值(它需要将值加载到编辑器中)。
我尝试在窗口和选项卡对象上设置 fns 和 var,但不知何故,一旦加载 Web 应用程序,它们就会从窗口对象中丢失。使用 chrome.tabs.executeScript,我可以摆弄 dom,但也不能在"窗口"上设置全局变量或任何内容。
如果没有更好的方法,我想我被迫添加到 DOM 并在加载我的 Web 应用程序后继续使用它,但它看起来很混乱。我希望有一种更干净的方法,比如设置一个onLoadFromExtension fn,我的Web应用程序可以执行它来获得它需要的值。
我找到了一种经过大量试验和错误后有效的方法,尽管它似乎仍然容易出错。而且它还取决于与已安装的扩展 ID 匹配的扩展 ID,因此如果无法硬编码,它将是另一条需要通过另一个通道传递的消息(阅读后,看起来可以硬编码,因为它是公钥的哈希,所以问题解决了)...开始认为操纵 DOM 不那么混乱了......
背景.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/*"]
},
- 在弹出窗口中,执行以下操作:
const parentWindow = window.opener parentWindow.postMessage({ action: 'opened' }) window.onmessage = msg => { alert(JSON.stringify(msg.data)) // Alerts you with {"your":"data"} }
- 在将调用
chrome.windows.create
的脚本中,执行以下操作:window.onmessage = msg => { if (msg.data.action == 'opened') { msg.source.postMessage({ your: 'data' }) } }
- 呼叫
chrome.windows.create
时设置setSelfAsOpener: true
这是如何工作的?
由于 Chrome 扩展程序windows
API 的限制,创建的窗口需要向其创建者(也称为 window.opener
)发布消息,否则创建者将无法访问WindowProxy
(对于将消息发布到创建的窗口很有用)。
- 如何检查设备是Windows Surface Tablet,浏览器是Chrome还是IE
- Onbeforeunload-windows分配不'不适用于Chrome
- 为什么我的windows机器上的chrome限制了脚本中的frequencybin数量
- Chrome扩展webAudio API停止Windows节能模式
- 我如何在谷歌Chrome上打开一个新的弹出窗口,它可以在不经过Windows'任务栏
- chrome.windows.onFocusChanged.addListener 在切换选项卡时不触发
- 使用标签页导航时Chrome Windows中的Angular ng-select错误
- Bootstrap 3 弹出框会立即隐藏在 Chrome for Windows 中
- Chrome扩展程序:将数据发送到使用chrome.windows.create创建的窗口
- 仅对 Linux Chrome 应用 css,而不对 Windows Chrome 应用 css
- Javascript setInterval 不在 Windows 上的 Safari 中运行,在 Chrome 中工作
- 如何在 Windows 上打开带有参数的 Chrome 打包应用
- 在带有触摸屏的 Windows 8 上检测 Chrome 中的触摸事件
- 画布突破页面加载 + cookie,直到仅在 Windows Chrome 上退出浏览器
- 告诉浏览器是运行在windows还是mac/linux上的chrome
- Windows上的Chrome会在点击时触发d3.缩放行为
- chrome.windows.onFocusChanged.addListener在关闭chrome时启动,插件崩溃
- Extjs Toolbar crash, extjs 4.2.1, Chrome, Windows
- Flowplayer中的MP4视频无法在Windows 7 Chrome中播放
- 当chrome最小化时,使windows任务栏上的chrome图标发光