Javascript 如何覆盖window.location错误事件? 一般问题

Javascript 如何覆盖window.location错误事件? 一般问题,javascript,modal-dialog,mobile-safari,overriding,Javascript,Modal Dialog,Mobile Safari,Overriding,在Javascript中,当加载URL时出现错误并覆盖默认行为时,需要通知我。例如,在iOS Safari上执行以下操作 window.location = 'http://pageDoesNotExist.badFormatting'; 。。。将弹出此警报消息 我想为这样的错误附加一个侦听器,并做一些事情,而不是显示一个丑陋的警报框 我的具体问题 当用户点击按钮时,如果安装了我的应用,我需要启动它,否则我需要打开应用商店让她下载我的应用。最重要的是: 这里的问题是第一个窗口。locatio

在Javascript中,当加载URL时出现错误并覆盖默认行为时,需要通知我。例如,在iOS Safari上执行以下操作

window.location = 'http://pageDoesNotExist.badFormatting';
。。。将弹出此警报消息

我想为这样的错误附加一个侦听器,并做一些事情,而不是显示一个丑陋的警报框

我的具体问题 当用户点击按钮时,如果安装了我的应用,我需要启动它,否则我需要打开应用商店让她下载我的应用。最重要的是:

这里的问题是第一个
窗口。location
在未安装应用程序时打开丑陋警报框。然后代码将回退到应用商店。当用户从应用商店返回Safari时,丑陋的警报框仍然存在。据我所知,window.onerror不会在mobile Safari上触发。

您的解决方案是


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

在标记中添加具有
width=“0”
属性的
对象,使用页面URL作为
数据属性的值,如果URL重定向到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';
  }

看看这个-我认为你必须有一个浏览器插件来做类似的事情,因为,从某种意义上说,当这个错误出现时,没有活动页面,因此没有你的页面javascript。因此,javascript必须内置到浏览器中——这就是使用插件的想法。你先看一下这个吗?Herman先生:我已经在使用这个解决方案了。iOS不允许浏览器插件,只有Android允许。Web用户:该解决方案会弹出一个确认框。我希望它对用户来说是无缝的——如果可以的话,只需转到第1页,否则在不警告用户的情况下转到第2页。我能找到的最佳解决方案是使用iframe,它完全解决了问题:iframe中的错误仍然会在iOS中弹出消息。但在安卓系统中没有,他们没有。它们在这里只是为了确定是否可以使用weither
customurl://
。用户第一次点击按钮而cookie不存在时,情况如何?cookie如何与您的应用程序安装同步?删除应用程序时,cookie将出错。如果没有cookie,则要求用户说明是否安装了应用程序。我认为你不能用应用程序访问safari的cookies。是的,如果你删除应用程序,cookie将是错误的。换句话说,当您的应用未安装时,尝试访问
customurl://
将不可避免地出现错误消息。但这是一个优雅的方式来避免它。
/* 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';
  }