Есть ли стандартный способ узнать, имеет ли мой 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 и атрибутonerror
HTML не работайте для этого. Иллюстрация рабочего script доступна здесь, но вы можете полностью игнорировать его и просто ответить на вопрос ниже.
Обратите внимание, что приведенный выше блок предназначен исключительно для иллюстрации того, почему я не могу использовать iframe.src
.
Я думаю, что должен быть простой/стандартный способ проверки доступности iframe
, но я не могу найти что-либо в Интернете или SO, кроме полурешений, которые просто проверяют iframe.src
и не делают применяются для многих случаев. Если мой хакерский блок try
/catch
считается технически "чистым" решением, другие могут повторно использовать его, если не найден лучший вариант.
Итак, есть ли какой-либо стандартный или более простой способ или плагин jQuery, чтобы проверить, имеет ли мой script доступ к документу iframe
без сравнения iframe
src
с window.location
? Без try
/catch
блоков и ошибок/предупреждений в консоли, если это возможно.