как проверить, не удалось ли вызвать window.location из-за того, что данный URL-адрес недействителен и т. д.? Есть ли какое-то событие, которое я могу установить для объекта окна или другого объекта, который может это поймать?
как определить, не удалось ли выполнить window.location?
Ответы (3)
Наконец-то он заработал, используя «обходной путь», который не является общим решением, как я изначально надеялся:
Я использую тот факт, что ссылка, которую я пытаюсь открыть, представляет собой настраиваемую схему URL-адресов (например, myxx://localhost) на мобильном устройстве, и если это не удается, действие, которое я хочу выполнить, представляет собой перенаправление на стандартный URL-адрес магазина приложений (os -специфический). Обходной путь пытается открыть пользовательский URL-адрес, и если это не удается, вскоре после этого срабатывает функция тайм-аута и открывается альтернативный URL-адрес:
setTimeout(function() { window.location=alternateUrl; }, 25);
window.location = customUrl;
Недостатком является то, что при сбое customURL стандартный браузер Safari показывает окно сообщения о том, что сайт не может быть открыт, но, по крайней мере, он все равно перенаправляет пользователя в магазин приложений.
На самом деле это невозможно, потому что при выполнении window.location = someURL
еще до того, как URL-адрес будет проверен, ваш документ удаляется из окна. У вас не осталось кода, который мог бы проверить, работает ли он.
Если ссылка находится в том же источнике, вы можете отправить XMLHttpRequest чтобы проверить, доступна ли страница, но, похоже, нет способа проверить, не запрашивается ли страница только из-за запроса из другого источника или из-за неправильного URL-адреса.
Для общего документа я не знаю, как проверить, доступна ли страница иностранного источника (но это можно сделать для изображения с помощью обработчика событий onload
).
вы можете проверить, существует ли страница, используя ajax. не проверял код, но он должен работать.
var rekuest= new XMLHttpRequest();
rekuest.open('GET', 'http://www.thisdoesnotexits.org', true);
rekuest.send();
if (rekuest.status === "404") {alert("not exist!"); }