连接到一个不存在的Web Socket服务器会导致大量错误记录到控制台,通常为... net::ERR_CONNECTION_REFUSED。有没有人想到一个解决办法来消除这个输出?XMLHttpRequest不会起作用,因为如果服务器不可访问,它会产生相同的详细错误输出。这里的目标是测试服务器是否可用,如果可用,则连接到它,否则使用回退,并且这样做不会向控制台发送错误输出。
... net::ERR_CONNECTION_REFUSED
XMLHttpRequest
qkf9rpyu1#
Chrome本身就在发出这些消息,没有办法屏蔽,这是chrome如何构建的一个功能;每当ResourceFetcher对象试图获取资源时,它的响应会被传回到它的上下文,如果有错误,浏览器会将其打印到控制台-请参阅此处。类似的问题可以在here中找到。如果愿意,可以使用chrome控制台过滤器this question discusses来阻止控制台中的这些错误,但是没有办法通过编程来阻止消息。
c6ubokkw2#
我不知道你为什么要阻止这个错误输出。我猜你只是想在调试的时候去掉它们。所以我在这里提供了一个可能对调试有用的工作。实时演示:http://blackmiaool.com/soa/43012334/boot.html
打开演示页面,点击“ Boot ”按钮,将打开一个新的标签页。点击新标签页中的“test”按钮,检查下面的结果。如果你想得到一个肯定的结果,请将url更改为wss://echo.websocket.org。
wss://echo.websocket.org
通过使用post message,我们可以让浏览器的标签页相互通信,这样我们就可以把那些错误输出移到我们不关心的标签页上。P.S.您可以随意刷新目标页面,而不会断开它与** Boot 页面**之间的连接。P.P.S您也可以使用storage event来实现这一点。
** 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>
目标.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>
knsnq2tg3#
也可能是由于协议不匹配。例如尝试访问http网站的https。
http
https
3条答案
按热度按时间qkf9rpyu1#
Chrome本身就在发出这些消息,没有办法屏蔽,这是chrome如何构建的一个功能;每当ResourceFetcher对象试图获取资源时,它的响应会被传回到它的上下文,如果有错误,浏览器会将其打印到控制台-请参阅此处。
类似的问题可以在here中找到。
如果愿意,可以使用chrome控制台过滤器this question discusses来阻止控制台中的这些错误,但是没有办法通过编程来阻止消息。
c6ubokkw2#
我不知道你为什么要阻止这个错误输出。我猜你只是想在调试的时候去掉它们。所以我在这里提供了一个可能对调试有用的工作。
实时演示:http://blackmiaool.com/soa/43012334/boot.html
如何使用?
打开演示页面,点击“ Boot ”按钮,将打开一个新的标签页。点击新标签页中的“test”按钮,检查下面的结果。如果你想得到一个肯定的结果,请将url更改为
wss://echo.websocket.org
。为什么?
通过使用post message,我们可以让浏览器的标签页相互通信,这样我们就可以把那些错误输出移到我们不关心的标签页上。
P.S.您可以随意刷新目标页面,而不会断开它与** Boot 页面**之间的连接。
P.P.S您也可以使用storage event来实现这一点。
** Boot .html:**
目标.html
knsnq2tg3#
也可能是由于协议不匹配。例如尝试访问
http
网站的https
。