你如何覆盖window.location错误事件?

时间:2012-01-06 22:12:04

标签: javascript modal-dialog mobile-safari function-overriding

一般问题

在Javascript中,我需要在加载URL并覆盖默认行为时收到通知。例如,在iOS Safari上执行以下操作...

window.location = 'http://pageDoesNotExist.badFormatting';

...会弹出此警告信息......

mobile safari canno open page

我想为这样的错误附加一个监听器,并做一些而不是显示一个丑陋的警告框。

我的具体问题

当用户点击按钮时,我需要启动我的应用程序(如果已安装),否则我需要打开App Store才能下载我的应用程序。 accepted solution是:

// Attempt to open app
window.location = 'myApp://';

// If app fails to open, will open app store 0.5 seconds later
window.setTimeout(
   function() {
      window.location = 'http://itunes.apple.com/myAppId';
   }, 
   500
);

这里的问题是,当未安装应用程序时,第一个window.location会打开丑陋的警告框。然后代码将回退到App Store。当用户从App Store返回到Safari时,丑陋的警报框仍然存在。据我所知,window.onerror无法在移动Safari上启动。

2 个答案:

答案 0 :(得分:3)

您的解决方案是here

基本上,您可以使用Cookie来确定您的应用程序是否已安装。

答案 1 :(得分:-1)

object属性添加width="0"到标记,使用页面网址作为data属性的值,然后在网址重定向到404时转到iTunes:

/* Find object element */
var hrefobj = document.querySelector("object");

/* Assign protocol string to data attribute of object element */
hrefobj.data = 'myApp://'; 

/* If the assignment fails */
if (hrefobj.data !== 'myApp://')
  {
  /* Redirect the window to the fallback URL */
  window.location = 'http://itunes.apple.com/myAppId';
  }