web-dev-qa-db-ja.com

沈黙ネット:: ERR_CONNECTION_REFUSED

存在しないWebソケットサーバーに接続すると、コンソールに大きなエラーが記録されます。通常は... net::ERR_CONNECTION_REFUSED

誰かがこの出力を沈黙させるためのハックアラウンドのアイデアを持っていますか? XMLHttpRequestは、サーバーに到達できない場合に同じ詳細エラー出力を生成するため、機能しません。

ここでの目標は、サーバーが使用可能かどうか、サーバーに接続されているかどうか、そうでない場合はフォールバックを使用してテストし、コンソールにエラー出力をスパムすることなくこれを行うことです。

14
Casper Beyer

Chrome自体がこれらのメッセージを送信しており、それらをブロックする方法はありません。これは、chromeが構築された方法の関数です。ResourceFetcherオブジェクトがリソースをフェッチしようとすると、その応答がコンテキストに返され、エラーが発生した場合、ブラウザーはそれをに出力します。コンソール- ここを参照

同様の質問が見つかります ここ

必要に応じて、 chrome console filter as この質問で説明 を使用して、コンソールでこれらのエラーをブロックできますが、プログラムでメッセージをブロックする方法はありません。

14
joepin

なぜこのエラー出力を防ぎたいのかわかりません。デバッグするときにそれらを取り除きたいだけだと思います。したがって、ここで回避策を提供することは、デバッグに役立つ可能性があります。

ライブデモ: http://blackmiaool.com/soa/43012334/boot.html

それを使用する方法?

デモページを開き、「起動」ボタンをクリックすると、新しいタブが開きます。新しいタブの「テスト」ボタンをクリックして、以下の結果を確認してください。肯定的な結果を得たい場合は、URLをwss://echo.websocket.orgに変更してください。

どうして?

メッセージ投稿 を使用することで、ブラウザのタブを相互に通信させることができます。したがって、これらのエラー出力を関係のないタブに移動できます。

P.S. ターゲットページブートページの間の接続を失うことなく、自由に更新できます。 -)。

P.P.S ストレージイベント を使用してこれを実現することもできます。

boot.html:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title>boot page</title>

</head>

<body>
    <button onclick="boot()">boot</button>
    <p>BTW, you can boot the page without the button if you are willing to allow the "pop-up"</p>
    <script>
        var targetWindow;

        function init() {
            targetWindow
        }

        function boot() {
            targetWindow = window.open("target.html");
        }
        boot();
        window.addEventListener('message', function(e) {
            var msg = e.data;
            var {
                action,
                url,
                Origin,
            } = msg;

            if (action === "testUrl") {
                let ws = new WebSocket(url);
                ws.addEventListener("error", function() {
                    targetWindow.postMessage({
                        action: "urlResult",
                        url,
                        data: false,
                    }, Origin);
                    ws.close();
                });
                ws.addEventListener("open", function() {
                    targetWindow.postMessage({
                        action: "urlResult",
                        url,
                        data: true,
                    }, Origin);
                    ws.close();
                });
            }


        });

    </script>
</body>

</html>

target.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title>target page</title>
</head>

<body>
    <h4>input the url you want to test:</h4>
    <textarea type="text" id="input" style="width:300px;height:100px;">
        </textarea>
    <br>
    <div>try <span style="color:red">wss://echo.websocket.org</span> for success result(may be slow)</div>
    <button onclick="test()">test</button>
    <div id="output"></div>
    <script>
        var Origin = location.Origin;
        var testUrl = Origin.replace(/^https?/, "ws") + "/abcdef"; //not available of course
        document.querySelector("#input").value = testUrl;

        function output(val) {

            document.querySelector("#output").textContent = val;
        }

        function test() {
            if (window.opener) {
                window.opener.postMessage({
                    action: "testUrl",
                    url: document.querySelector("#input").value,
                    Origin,
                }, Origin);
            } else {
                alert("opener is not available");
            }

        }
        window.addEventListener('message', function(e) {
            var msg = e.data;
            if (msg.action === "urlResult") {
                output(`test ${msg.url} result: ${msg.data}`);
            }
        });

    </script>
</body>

</html>
1
blackmiaool