Замещающий текст iframe при ошибке загрузки iframe для X-Frame-Options:SAMEORIGIN | ОТКАЗЫВАТЬСЯ ОТ

Мне нужно показать несколько фреймов в моем приложении Angular.

для этого мой HTML похож на

<iframe ng-src="{{iframeObj.iUrl}}" frameborder="0"></iframe>

Но когда iUrl не разрешен в iframe, это когда X-Frame-Options:SAMEORIGIN или DENY

Тогда мой IFrame не приходит, и это естественно, что он не придет.

Но я хочу показать альтернативный текст, когда Iframe загружается неправильно. У тега Like Image есть атрибут alt.

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

Наиболее желательно решение на AngularJS и простом JavaScript.

Заранее спасибо.


person Shahjada Talukdar    schedule 21.10.2014    source источник
comment
Я думаю, что у <ifame> есть событие onerror. Попробуй.   -  person Ismael Miguel    schedule 21.10.2014
comment
Попробуйте это: stackoverflow.com/questions/15273042/   -  person Ismael Miguel    schedule 21.10.2014
comment
Или это: stackoverflow.com/questions/6327128/   -  person Patrick Q    schedule 21.10.2014
comment
@PatrickQ У вас не будет доступа к contentWindow, если src не находится в том же домене, о чем спрашивает ОП.   -  person Ismael Miguel    schedule 21.10.2014
comment
@IsmaelMiguel В верхнем ответе на этот вопрос упоминается, как поступить в случае другого домена, если вы контролируете обе системы. OP здесь не упоминает, так это или нет, поэтому я не вижу никакого вреда в предоставлении этого решения в комментарии (я не помечал это как дубликат этого вопроса).   -  person Patrick Q    schedule 21.10.2014
comment
@PatrickQ Iframe Alt Text When Iframe load error for X-Frame-Options:SAMEORIGIN | DENY Название опровергает то, что вы сказали в своем комментарии.   -  person Ismael Miguel    schedule 21.10.2014
comment
@IsmaelMiguel Это ничего не говорит о том, контролирует ли OP обе системы, только то, что они не являются одним и тем же доменом.   -  person Patrick Q    schedule 21.10.2014
comment
@PatrickQ Это правда, но поскольку ОП запрашивает конкретную ошибку, мы можем предположить, что он не контролирует другой домен, иначе он установил бы заголовок x-frame-options и не имел бы этой проблемы.   -  person Ismael Miguel    schedule 21.10.2014


Ответы (1)


Я нашел решение вашей проблемы:

Идея состоит в том, чтобы установить событие onload ДО установки src.

Вы можете попробовать этот код:

document.getElementsByTagName('iframe').onload=function(){
    try{
        var win=this.contentWindow;
        win.closed && error_function();
    }catch(e){
        error_function();
    }
};

Узнайте здесь, как это работает: http://jsfiddle.net/tec6y2y9/1/.

Примечание. Я внес некоторые изменения в скрипку, чтобы показать, что она действительно работает! error_function() — это вымышленная функция, показывающая, куда вы поместите свой код в случае сбоя!

Я надеюсь, что это работает для вас.

person Ismael Miguel    schedule 21.10.2014
comment
@CBroe Это не только в Chrome: / Firefox тоже не любит мой код: / - person Ismael Miguel; 21.10.2014
comment
@CBroe win.closed имеет значение false в Chrome и Firefox, даже когда соединение закрыто. - person Ismael Miguel; 21.10.2014
comment
@IsmaelMiguel, это не работает, я не получаю никаких предупреждений в jsfiddle. Если я могу получить событие ошибки Iframe не удалось загрузить, это мое требование... - person Shahjada Talukdar; 21.10.2014
comment
@DestroMas Я работаю над кроссбраузерным решением. Он работает в Opera 12.17, что меня удивило, когда CBroe сказал, что он не работает в Chrome. В настоящее время я на работе, но у меня уже есть решение (больше похожее на попытку). - person Ismael Miguel; 21.10.2014
comment
@DestroMas Я не могу найти чистый ответ на стороне клиента. Стандарт, который должен работать, находится там. Работает только в Opera 12.17 и ниже (может быть, до Opera 9?). У меня есть идея для решения на стороне сервера + на стороне клиента. - person Ismael Miguel; 22.10.2014
comment
@ashingc Можете ли вы быть более конкретным? Это не работает, мне не поможет. Мне нужно знать ОС, версию Firefox и ОЧЕНЬ ТОЧНОЕ сообщение об ошибке. - person Ismael Miguel; 31.03.2016