通过Microsoft Edge扩展背景页面访问localhost

时间:2016-09-19 07:41:11

标签: microsoft-edge microsoft-edge-extension

最近,我们将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.');
        }            
    });
})();

3 个答案:

答案 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

Open/Closed Principle

答案 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