最近、Chrome 拡張機能を Microsoft Edge に移行しました。Edge にはネイティブ メッセージングが実装されていないため、Edge 拡張機能のバックグラウンド ページを介して websocket によってネイティブ アプリと通信したいと考えています。
テストの結果、バックグラウンド ページで websocket が外部ホストに正常にアクセスできることがわかりましたが、localhost ではアクセス '127.0.0.1' が失敗しました。そして、Web ページで localhost にアクセスしようとしましたが、成功しました!
Edge ブラウザー情報: userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 8) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393" "ローカルホスト ループバックを許可する" をチェックしました(これにより、デバイスが危険にさらされる可能性があります)" from 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.');
}
});
})();