2013-09-16 2 views
10

Если изображение не загружается на страницу, у нас есть функция onerror, которая может загружать изображение по умолчанию.Определите, откроется ли сайт в iframe

Есть ли эквивалент для загрузки сайта в iFrame?

E.g. mashable.com может быть загружен в iFrame, тогда как многие социальные сайты, например. Facebook, Twitter и др. Не могут.

Поэтому, когда пользователь пытается загрузить, например, Twitter и ничего не отображается, я хотел бы, чтобы сообщение показывало, что «эта страница не может быть отображена», а затем откройте ссылку на новой вкладке и направьте ее, скажем, через 3 секунды.

Не уверен, что это возможно.

+0

@MilchePatern - The вопрос спрашивает о сайтах, которые блокируют загрузку в iframe, а не URL-адресах, которые просто неправильны. – Quentin

+1

Humm, спасибо .. Мне нужен кофе. Связано: http://stackoverflow.com/questions/4548984/detect-if-the-iframe-content-has-loaded-successfully –

+1

Посмотрите этот ответ: stackoverflow.com/questions/4548984/detect-if-the-iframe- content-has-loaded-successfully # answer-4637351 –

ответ

-3

Чтобы проверить, если страница была загружена в IFRAME Вы можете использовать код JavaScript:

if(parent == self) 
{ 
// Page loaded NOT in iframe 
} 
else 
{ 
// Page loaded in iframe 
} 

Он работает в FF и Chrome, в других браузерах я не пробовал.

+0

Вы неправильно поняли вопрос. – isherwood

0

if(frames){if(top.frames.length>0){ YOUR CODE HERE }}

, если вы хотите удалить родителю:

if(frames){if(top.frames.length>0){top.location.href=self.location;}}

0

Вы можете обернуть код вокруг:

if($("#iframe1").find('iframe').length > 0) { 
    //Site allowed 
} 
else { 
    //Site blocked. 
} 
3

Из-за ограничений безопасности, что не представляется возможным с клиентской стороны. Однако у вас есть два альтернативных решения:

  • Сделайте вызов с сервера и проверьте заголовки X-Frame-Options.
  • В качестве альтернативы вы можете установить тайм-аут и предположить, что страница не может быть загружена, если событие загрузки не будет запущено через некоторое время.

См Catch error if iframe src fails to load . Error :-"Refused to display 'http://www.google.co.in/' in a frame.."

+1

* С сервера * легко. Например, если вы используете PHP, вы можете использовать http://php.net/manual/es/function.get-headers.php – hectorct

0
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"); 
} 
+2

Просьба включить объяснение того, что делает ваш код и как он отвечает на вопрос. Если вы получите фрагмент кода в качестве ответа, вы можете не знать, что с ним делать. Ответ должен дать руководству OP и будущих посетителей о том, как отлаживать и исправлять свои проблемы. Указывая, что представляет собой идея вашего кода, очень помогает в понимании проблемы и применении или изменении вашего решения. – Palec

+0

Пожалуйста, смотрите снимок экрана, который я разместил здесь http://www.callpanipat.com/blog-discussion.php – vinod

+0

При просмотре diff попробуйте сыграть с кнопками смены режима (встроенные, бок о бок, бок о бок -side markdown). Таким образом, вы можете выбрать, где вы видите изменения, самые лучшие. – Palec

2

У меня была такая же проблема, и я использовал AngularJS, я получил это работает, используя метод ниже. Надеюсь, что это помогает ..

  1. Установите 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> 
    
  2. Я установить интервал для прослушивания, если 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); 
    
Смежные вопросы