Javascript 静默网络::错误连接被拒绝

Javascript 静默网络::错误连接被拒绝,javascript,google-chrome,firefox,websocket,safari,Javascript,Google Chrome,Firefox,Websocket,Safari,连接到不存在的web套接字服务器会导致将响亮的错误记录到控制台,通常是。。。网络::错误连接被拒绝 有没有人想到用黑客来阻止这个输出XMLHttpRequest无法工作,因为如果无法访问服务器,它会产生相同的详细错误输出 这里的目标是测试服务器是否可用,然后连接到服务器,否则使用回退,并在不向控制台发送带有错误输出的垃圾邮件的情况下执行此操作。Chrome本身正在发送这些消息,并且无法阻止它们。这是chrome如何构建的函数;每当ResourceFetcher对象尝试获取资源时,其响应都会传回其

连接到不存在的web套接字服务器会导致将响亮的错误记录到控制台,通常是
。。。网络::错误连接被拒绝

有没有人想到用黑客来阻止这个输出
XMLHttpRequest
无法工作,因为如果无法访问服务器,它会产生相同的详细错误输出


这里的目标是测试服务器是否可用,然后连接到服务器,否则使用回退,并在不向控制台发送带有错误输出的垃圾邮件的情况下执行此操作。

Chrome本身正在发送这些消息,并且无法阻止它们。这是chrome如何构建的函数;每当ResourceFetcher对象尝试获取资源时,其响应都会传回其上下文,如果出现错误,浏览器会将其打印到控制台-

类似的问题也可以找到


如果愿意,可以使用as在控制台中阻止这些错误,但无法通过编程阻止消息。

我不知道为什么要阻止此错误输出。我猜你只是想在调试时去掉它们。所以我在这里提供了一个可能对调试有用的工作

现场演示:

如何使用它? 打开演示页面,点击“启动”按钮,它将打开一个新的选项卡。单击“新建”选项卡中的“测试”按钮并检查以下结果。如果您希望得到肯定的结果,请将url更改为
wss://echo.websocket.org

为什么? 通过使用,我们可以使浏览器选项卡相互通信。所以我们可以将这些错误输出移到一个我们不关心的选项卡上

另外,您可以自由刷新目标页面,而不会失去它与启动页面之间的连接

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>

启动页
靴子
顺便说一句,如果你愿意允许“弹出”,你可以不按按钮启动页面

var targetWindow; 函数init(){ 塔吉特文杜 } 函数boot(){ targetWindow=window.open(“target.html”); } boot(); window.addEventListener('message',函数(e){ var msg=e.data; 变量{ 行动, 网址, 起源, }=味精; 如果(操作==“测试URL”){ 设ws=newwebsocket(url); ws.addEventListener(“错误”,函数(){ targetWindow.postMessage({ 行动:“结果”, 网址, 数据:假, },原产地); ws.close(); }); ws.addEventListener(“打开”,函数(){ targetWindow.postMessage({ 行动:“结果”, 网址, 数据:没错, },原产地); ws.close(); }); } });
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>

目标页
输入要测试的url:

尝试wss://echo.websocket.org 对于成功结果(可能很慢) 测试 var origin=location.origin; var testUrl=origin.replace(/^https?/,“ws”)+“/abcdef”//当然没有 document.querySelector(“#input”).value=testUrl; 函数输出(val){ document.querySelector(“#output”).textContent=val; } 功能测试(){ if(窗口开启器){ window.opener.postMessage({ 操作:“testUrl”, url:document.querySelector(“#input”).value, 起源, },原产地); }否则{ 警报(“开启器不可用”); } } window.addEventListener('message',函数(e){ var msg=e.data; 如果(msg.action==“urlResult”){ 输出(`test${msg.url}结果:${msg.data}`); } });
@jfriend00恐怕不行,chrome没有委托到
控制台。错误
来释放错误。这个问题看起来相关:。怀疑没有什么变化,答案仍然是“你不能”ws-server是否为你的html文件提供服务?@blackmiaool在这个特定的案例中没有,但是,这个问题也是关于好奇心的;)答案仍然是你不能,但Chrome的更高版本确实有更好的过滤功能,而且它们也能更清楚地标记日志的来源;网络过滤不会过滤web套接字错误输出,不确定这是否是故意的。至于原因,只是因为它有很多噪音,并且不希望在GitHub上不断发布错误的“它不工作”问题。最新版本的chrome确实引入了网络消息过滤功能,但它因web套接字错误而中断。@CasperBeyer我明白了。如果将websocket与html一起托管,则可以在页面的开头启动websocket。此ws必须成功连接,因为您可以获取html。并侦听其关闭事件以了解服务器不可用的时间。或者只是构建一个服务器来检查ws-server是否在html服务器上可用。@CasperBeyer所以这个答案(不是注释)对您来说是不可接受的,对吗?@CasperBeyer通常,您可以在页面中央放置一个漂亮的“启动”按钮。使用onclick回调打开的页面不会被阻止@CasperBeyer有一个类似的解决方案:在页面上放置一个“测试”按钮。当用户点击它时,打开一个带有
窗口的新窗口。打开显示“测试”的
。测试完成后,自动关闭小窗口,并确定要执行的操作。如果你认为可以接受,我会做一个演示。