1

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

3 回答 3

1

为了节省您的点击次数:IE、Chrome 和 Firefox 允许,Edge 不允许。微软表示,在 Edge 扩展中访问 localhost 是被设计阻止的

“我们正在为下一个版本开发原生消息传递,使用原生消息传递是解决这种情况的正确方法。从扩展背景页面未启用本地主机访问是设计使然。”

https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8984919/

... Edge 的本机消息传递需要 UWP 主机:

“在高层次上,Microsoft Edge 扩展使用与 Chrome 和 Firefox 扩展相同的原生消息传递 API。但是,原生消息传递主机将需要使用通用 Windows 平台来实现。”

https://docs.microsoft.com/en-us/microsoft-edge/extensions/guides/native-messaging

于 2017-11-21T06:58:30.530 回答
1

我在为 Edge 开发自己的扩展时遇到了这个问题。我还检查了 about:flags 中的“允许环回...”设置,所以我感到非常困惑和沮丧。让您的扩展程序能够在开发时访问本地主机似乎是一件合理的事情......对吗?

事实证明,您实际上可以从 Edge 扩展访问 localhost。您只需确保通过CheckNetIsolation LoopbackExempt -a -n="Microsoft.MicrosoftEdge_8wekyb3d8bbwe"在 Powershell 提示符下运行(以管理员模式运行)将 Edge 添加到环回豁免列表。

要撤消它,只需运行CheckNetIsolation LoopbackExempt -d -n="Microsoft.MicrosoftEdge_8wekyb3d8bbwe".

有关 Edge 扩展和 localhost 请求的 Edge 问题:https ://developer.microsoft.com/en-us/microsoft-edge/platform/issues/13966307/ 。

于 2018-11-06T00:02:37.703 回答
0

通过 Microsoft Edge 扩展后台页面访问 localhost

https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8984919/

于 2016-10-12T03:30:47.330 回答