Как вы переопределяете событие ошибки window.location? - PullRequest
17 голосов
/ 07 января 2012

Общая проблема

В Javascript мне нужно получать уведомления, когда возникает ошибка при загрузке URL и переопределении поведения по умолчанию.Например, при выполнении следующего в iOS Safari ...

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

... появится это предупреждение ...

mobile safari canno open page

Я бынапример, присоедините слушателя к такой ошибке и сделайте что-нибудь вместо , чтобы отобразить окно с ужасным предупреждением.

Моя конкретная проблема

Когда пользователь нажимает кнопку, мне нужно запустить мое приложение, если оно установлено, иначе мне нужно открыть App Store, чтобы он мог загрузить мое приложение. принятое решение :

// 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 ]

3 голосов
/ 10 января 2012

Ваше решение здесь .

По сути, вы можете использовать куки, чтобы определить, установлено приложение или нет.

0 голосов
/ 12 января 2012

Добавьте object с атрибутом width="0" к разметке, используйте URL-адрес страницы в качестве значения атрибута data, затем перейдите в iTunes, если URL перенаправляет на 404:

/* 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';
  }
...