最近,我们将Chrome扩展程序迁移到Microsoft Edge。对于Edge尚未实现本机消息传递,因此我们希望通过边缘扩展背景页面通过websocket与本机应用程序进行通信。
经过测试,我们发现,在后台页面中websocket可以成功访问外部主机,但是localhost,即使访问“127.0.0.1”失败。 我们尝试访问网页中的localhost,确实如此!
边缘浏览器信息: userAgent:“Mozilla / 5.0(Windows NT 10.0; Win64; x64; ServiceUI 8)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 51.0.2704.79 Safari / 537.36 Edge / 14.14393” 我们从about:flags中检查了“允许localhost环回(这可能会使您的设备处于危险中)”。
Edge扩展后台页面是否支持访问localhost?如果是的话,我们怎样才能实现呢?如果没有,有人可以帮忙吗?
我们以此示例运行WebSocket服务器:https://blog.idrsolutions.com/2013/12/websockets-an-introduction/。
可以从https://github.com/chhxia/Edge-Extension下载扩展程序。 边扩展背景js的代码:
var ws;
function openSocket(){
var socket, path;
// path = 'wss://echo.websocket.org'; // successfully access this path.
path = 'ws://localhost:8080/EchoChamber/echo';
console.log( '===> Tested path :: ', path );
try {
ws = new WebSocket( path );
}
catch ( e ) {
console.error( '===> WebSocket creation error :: ', e );
}
ws.onopen = function(){
alert('open...');
ws.send('text');
}
ws.onmessage = function(e){
alert("receive: " + e.data);
}
ws.onclose = function(e){
ws = undefined;
alert('close...' + e);
}
}
(function(){
openSocket();
browser.browserAction.onClicked.addListener(function(tab) {
if(ws === undefined){
openSocket();
}else if(ws && ws.readyState === WebSocket.OPEN){
alert('send');
ws.send('text');
}else{
alert('websocket is closed.');
}
});
})();
答案 0 :(得分:1)
在为Edge开发自己的扩展程序时遇到了这个问题。我还检查了about:flags中的“允许回送...”设置,因此感到非常困惑和沮丧。在开发过程中让您的扩展程序能够到达localhost似乎是一件合理的事情……对吗?
事实证明,您实际上可以从Edge扩展访问localhost。您只需确保通过在Powershell提示符下运行CheckNetIsolation LoopbackExempt -a -n="Microsoft.MicrosoftEdge_8wekyb3d8bbwe"
(以管理员模式运行)将Edge添加到环回豁免列表中即可。
要撤消该操作,只需运行CheckNetIsolation LoopbackExempt -d -n="Microsoft.MicrosoftEdge_8wekyb3d8bbwe"
。
与Edge扩展和本地主机请求有关的Edge问题:https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/13966307/。
答案 1 :(得分:0)
通过Microsoft Edge扩展背景页访问localhost
答案 2 :(得分:0)
为了节省您的点击次数:IE,Chrome和Firefox允许它,Edge没有。微软表示,在Edge扩展中访问localhost 被设计阻止:
"我们正在为下一个版本和使用的Native Messaging工作 本机消息传递是解决此方案的正确方法。本地主机 扩展后台页面未启用访问设计。"
https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8984919/
... Edge的本机消息传递需要UWP主机:
"在较高级别,Microsoft Edge扩展使用相同的API 原生消息传递为Chrome和Firefox扩展。但是,原生 消息传递主机需要使用通用Windows实现 。平台"
https://docs.microsoft.com/en-us/microsoft-edge/extensions/guides/native-messaging