最近我们将 Chrome 扩展迁移到 Microsoft Edge。由于 Edge 还没有实现原生消息传递,所以我们希望通过 Websocket 通过 Edge 扩展后台页面与原生应用程序进行通信。
经过测试,我们发现,在后台页面websocket可以成功访问外部主机,但是localhost,即使访问'127.0.0.1'失败。我们尝试在网页中访问 localhost,它成功了!
Edge 浏览器信息:userAgent:“Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393”我们已经检查了“允许本地主机环回” (这可能会使您的设备处于危险之中)”来自 about:flags。
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.');
}
});
})();