Определите, откроется ли сайт в iframe
Если изображение не загружается на страницу, у нас есть функция onerror, которая может загружать изображение по умолчанию.
Есть ли эквивалент для загрузки сайта в iFrame?
например. mashable.com может быть загружен в iFrame, тогда как многие социальные сайты, например. Facebook, Twitter и др. Не могут.
Поэтому, когда пользователь пытается загрузить, например, Twitter и ничего не отображается, я бы хотел, чтобы сообщение показывало, что "эта страница не может быть отображена", а затем открывать ссылку на новой вкладке и направлять ее по истечении 3 секунд.
Не уверен, что это возможно.
Ответы
Ответ 1
Из-за ограничений безопасности это невозможно с клиентской стороны. Однако у вас есть два альтернативных решения:
- Выполняйте вызов с сервера и проверяйте заголовки X-Frame-Options.
- В качестве альтернативы вы можете установить тайм-аут и предположить, что страница не может быть загружена, если событие загрузки не будет запущено через некоторое время.
См. Ошибка при сбое, если iframe src не загружается. Ошибка: - "Отклонено для отображения" http://www.google.co.in/ "в кадре" и "
Ответ 2
У меня была та же проблема, и я использовал AngularJS, я работал с этим методом ниже. Надеюсь, что это поможет.
-
Установите iframe в html
<div ng-if="!iframeError">
<iframe id="iframeID" src="http://www.google.com" height="500px"></iframe>
</div>
<div ng-if="iframeError">Not Supported</div>
-
Я устанавливаю интервал для прослушивания, если доступен iframe
var ife = setInterval(function () {
if ($("#iframeID")) {
$("#iframeID").load(function (ev) {
var iframe = $("#iframeID");
var iframeDocument;
try {
iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
}
catch (e) {
window.open("http://www.google.com");
$scope.iframeError = true;
//I opened the url in new page
//you can handle it any way you want
}
});
clearInterval(ife);
}
}, 200);
Ответ 3
if(frames){if(top.frames.length>0){ YOUR CODE HERE }}
если вы хотите удалить родительский элемент:
if(frames){if(top.frames.length>0){top.location.href=self.location;}}
Ответ 4
Вы можете обернуть код вокруг:
if($("#iframe1").find('iframe').length > 0) {
//Site allowed
}
else {
//Site blocked.
}
Ответ 5
var isInIframe = (window.location != window.parent.location);
if (isInIframe) {
alert("Window is in iframe");
// Do what you want
//top.location.href=self.location;
} else {
alert("Window is not in iframe");
}
Ответ 6
Чтобы проверить, была ли страница загружена в iframe, вы можете использовать код javascript:
if(parent == self)
{
// Page loaded NOT in iframe
}
else
{
// Page loaded in iframe
}
Он работает в FF и Chrome, в других браузерах я не пробовал.