如何检测窗口位置失败?

12
我该如何检查调用window.location 失败是因为给定的URL无效等原因?是否可以在窗口对象或其他对象上设置某些事件来捕获这种情况?
3个回答

13

最终我找到了一个"权宜之计"使它工作,但这不是我最初希望的通用解决方案:

我利用我要打开的链接是移动端上的自定义URL scheme(例如myxx://localhost),如果失败,我想执行的操作是重定向到标准的应用商店URL(针对不同操作系统)。这个“权宜之计”尝试打开自定义URL,如果失败,超时函数不久后就会启动并打开备用URL:

setTimeout(function() { window.location=alternateUrl; }, 25);
window.location = customUrl;

不足之处在于当自定义URL失败时,标准的Safari浏览器会显示一个消息框,指示该网站无法打开,但至少仍然会将用户重定向到App Store。


@someUser 我现在已经在安卓上测试过了,它可以正常工作。 - SpringLearner

3
不太可能,因为在执行 window.location = someURL 时,在 URL 被测试之前,您的文档已从窗口中移除。 您没有剩余的代码可以测试它是否起作用。
如果链接位于同一源上,则可以发出 XMLHttpRequest 来测试页面是否可达,但似乎没有办法测试页面是否无法请求只是由于跨原始请求或 URL 不正确而造成。
对于普通文档,我不知道有什么方法来测试外部来源页面是否可达(但可以使用 onload 事件处理程序来完成图像的操作)。

1
我尝试使用XMLHttpRequest,但是URL不在同一个域中,所以它无法工作... - Sagi Mann
1
@sagimann,你可以设置一个服务器应用程序,从你的应用程序中调用它来进行检查。这样你就不会遇到跨域错误了。 - Michael Todd
是的,这并不是“如何在JavaScript中实现”的答案,但它确实是最合理的解决方案。 - Denys Séguret

1
你可以使用ajax检查页面是否存在。没有测试代码,但应该可以工作。
var rekuest= new XMLHttpRequest();  
rekuest.open('GET', 'http://www.thisdoesnotexits.org', true);  
rekuest.send();  
if (rekuest.status === "404") {alert("not exist!"); }  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接