Определите, откроется ли сайт в 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, в других браузерах я не пробовал.