从JS(pinger)的Ameer Dawood ideea开始,当远程IP是http服务器时我遇到了问题,并且请求HTTP身份验证,浏览器弹出用户/密码框。如何避免这种情况,如果远程服务器请求auth,我们知道远程服务器正在响应,我需要调用alive()函数(不能与http://someBogusUser:someBogusPass@ + ip一起使用,因为它再次请求密码,我不希望在客户端脚本上保存核心密码:)) 代码的主要部分是:
img = new Image();
img.onload = function() { alive()();};
img.onerror = function() { unreachable()();};
img.src = "http://" + ip;
setTimeout(function() { unreachable();}, 1500);
我正在尝试测试是否可以使用xmlhttprequest readyState和status来查看远程IP是否正在响应。
任何人都有关于如何做到这一点的想法,或者知道另一种方法来测试JS是否还活着。请不要给我服务器端解决方案(我现在使用它们+ AJAX)。
谢谢
修改 我认为Web工作人员会阻止任何身份验证弹出窗口到达浏览器,但他们无法处理DOM事件(onload,onerror),因此工作人员无法帮助...... :(
答案 0 :(得分:1)
我认为你不能避免它。
这个hack在任何正常的意义上都不是'ping';它不会“检查IP是否存在”。这是一个HTTP请求,受HTTP身份验证,重定向和其他方面的影响。 (当然,它不会“ping”未运行HTTP服务器的计算机。)任何远程包含的方法(img
,script
,style
,iframe
)冒充身份验证的风险。
使用XMLHttpRequest,由于同源策略,您将遇到问题。 IE和Opera将立即失败任何有安全错误的尝试。 Firefox和WebKit会尝试建立连接,虽然你不会得到任何可用的响应,所以你必须继续从超时长度猜测。这本身对我来说似乎很成问题。当然,任何给定网站的/
页面都需要超过1.5秒才能返回完整的文档。
简而言之,我认为'pinger'不是一个有趣的实验以外的任何东西。对于任何实际工作,您将不得不继续服务器端ping。