Есть ли стандартный способ узнать, имеет ли мой script доступ к документу iframe?
Я не мог найти ничего в Интернете, поэтому я придумал это:
function checkifr() {
function errHandler() {
alert('Error. Try again later.');
}
var ifr = $('#ifr')[0]; //the iframe DOM element
try {
var d = ifr.contentWindow || ifr.contentDocument;
if (!d) {
errHandler();
return false;
}
var b = $('#ifr').contents().find('body');
//... manipulate iframe content
} catch(e) {
errHandler();
}
}
Это работает, Firefox вызывает ошибку, когда я пытаюсь получить доступ к содержимому iframe и заканчивается в блоке catch. Chrome показывает предупреждение Unsafe JavaScript attempt to access frame в консоли, но никогда не входит в блок catch, он возвращает null для этих попыток, поэтому первоначальный if (!d) позаботится об этом. Opera и IE ведут себя аналогично FF. Изменить:. В приведенном выше коде теперь Chrome возвращает "пустой" объект Window (без свойств), которые не запускают мой блок if. Отметьте Esailija ответ, который прекрасно работает в кросс-браузере!
Здесь скрипт.
I не может проверить iframe src на window.location.
Исправление:. Это связано с тем, что эта функция является частью небольшого плагина для загрузки изображений, который я разрабатываю (используя
iframeкак цель, поскольку IE < 9 не поддерживает XHR2) и цель в основном заключается в проверке ошибки соединения/таймаута/и т.д. Страницы браузера по умолчанию для этих ошибок подчиняются одной и той же полиции происхождения, поэтому цель этого вопроса. Я не хочу посылать вызов ajax, чтобы проверить, доступна ли страница, поскольку я хочу проверить сам запрос отправки. jQuery .load не срабатывает для ошибок, jQuery .error и атрибутonerrorHTML не работайте для этого. Иллюстрация рабочего script доступна здесь, но вы можете полностью игнорировать его и просто ответить на вопрос ниже.
Обратите внимание, что приведенный выше блок предназначен исключительно для иллюстрации того, почему я не могу использовать iframe.src.
Я думаю, что должен быть простой/стандартный способ проверки доступности iframe, но я не могу найти что-либо в Интернете или SO, кроме полурешений, которые просто проверяют iframe.src и не делают применяются для многих случаев. Если мой хакерский блок try/catch считается технически "чистым" решением, другие могут повторно использовать его, если не найден лучший вариант.
Итак, есть ли какой-либо стандартный или более простой способ или плагин jQuery, чтобы проверить, имеет ли мой script доступ к документу iframe без сравнения iframe src с window.location? Без try/catch блоков и ошибок/предупреждений в консоли, если это возможно.