как определить, не удалось ли выполнить window.location?

как проверить, не удалось ли вызвать window.location из-за того, что данный URL-адрес недействителен и т. д.? Есть ли какое-то событие, которое я могу установить для объекта окна или другого объекта, который может это поймать?


person Sagi Mann    schedule 23.08.2013    source источник


Ответы (3)


Наконец-то он заработал, используя «обходной путь», который не является общим решением, как я изначально надеялся:

Я использую тот факт, что ссылка, которую я пытаюсь открыть, представляет собой настраиваемую схему URL-адресов (например, myxx://localhost) на мобильном устройстве, и если это не удается, действие, которое я хочу выполнить, представляет собой перенаправление на стандартный URL-адрес магазина приложений (os -специфический). Обходной путь пытается открыть пользовательский URL-адрес, и если это не удается, вскоре после этого срабатывает функция тайм-аута и открывается альтернативный URL-адрес:

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

Недостатком является то, что при сбое customURL стандартный браузер Safari показывает окно сообщения о том, что сайт не может быть открыт, но, по крайней мере, он все равно перенаправляет пользователя в магазин приложений.

person Sagi Mann    schedule 05.09.2013
comment
@someUser Я проверил сейчас в Android, и это сработало - person SpringLearner; 07.10.2019

На самом деле это невозможно, потому что при выполнении window.location = someURL еще до того, как URL-адрес будет проверен, ваш документ удаляется из окна. У вас не осталось кода, который мог бы проверить, работает ли он.

Если ссылка находится в том же источнике, вы можете отправить XMLHttpRequest чтобы проверить, доступна ли страница, но, похоже, нет способа проверить, не запрашивается ли страница только из-за запроса из другого источника или из-за неправильного URL-адреса.

Для общего документа я не знаю, как проверить, доступна ли страница иностранного источника (но это можно сделать для изображения с помощью обработчика событий onload).

person Denys Séguret    schedule 23.08.2013
comment
Я пробовал с XMLHttpRequest, но URL-адрес не находится в том же домене, поэтому он не работает... - person Sagi Mann; 23.08.2013
comment
@sagimann Вы можете настроить серверное приложение, которое вы можете вызывать из своего приложения, которое будет его проверять. Таким образом, вы не столкнетесь с ошибкой перекрестного происхождения. - person Michael Todd; 23.08.2013
comment
Да, это не совсем ответ на вопрос, как это сделать в javascript, но это действительно самое разумное решение. - person Denys Séguret; 23.08.2013

вы можете проверить, существует ли страница, используя ajax. не проверял код, но он должен работать.

var rekuest= new XMLHttpRequest();  
rekuest.open('GET', 'http://www.thisdoesnotexits.org', true);  
rekuest.send();  
if (rekuest.status === "404") {alert("not exist!"); }  
person Davor Mlinaric    schedule 23.08.2013