Frame Busting Buster не полностью работает для IE

Я работал над уничтожением фреймов (что по имени, хе-хе), который держал моих пользователей на моей странице и открывал новое окно с целевым URL. Я использую скрипт Lightbox для отображения фреймов, вот что я делаю:

1) Добавлено событие для всех кликов.lightbox, например:

$('.lightbox').live("click", function(e) { 
  e.preventDefault(); 
  $('#redirectURL').val($(this).attr('href')); 
  $(this).lightbox(); 
}

2) Добавлена ​​рамка перебора бастера:

<script type="text/javascript">
    var prevent_bust = 0  
    window.onbeforeunload = function() { prevent_bust++ }  
    setInterval(function() {  
      if (prevent_bust > 0) {  
        prevent_bust -= 2  
        window.top.location = 'http://server-which-responds-with-204.com'  
      }  
    }, 1)  
</script>

3) Модифицированный код бастера с перебором кадров в соответствии с моими потребностями:

  • определить, хочет ли iframe изменить window.top.location
  • если так, предотвратите это, используя ответ сервера 204
  • открыть новую страницу: window.open( $('#redirectURL', '_blank' );
  • закрыть лайтбокс: $('.jquery-lightbox-button-close').click();

Пока что это то, что я придумал:

var prevent_bust = 0  
window.onbeforeunload = function() { prevent_bust++ }  
setInterval(function() {  
  if (prevent_bust > 0) {  
    prevent_bust -= 2;
    redirectURL = $('#redirectURL').val();
    if(redirectURL != "") {
        window.top.location = 'http://www.****.com/ajax/nocontent.php';
        window.open(redirectURL, "_blank");
        $('.jquery-lightbox-button-close').click();
        $('#redirectURL').val('');
    } else {
        window.top.location = 'http://www.****.com/ajax/nocontent.php';
    }
  }  
}, 1); 

// РЕДАКТИРОВАТЬ: Before I forget, 'nocontent.php' is a file that returns a 204 header

Для Firefox он действует так, как я его запрограммировал, если в window.top.location обнаружено изменение, он открывает новый фрейм / страницу и не позволяет iframe перезагрузить верхнее местоположение и округлить его, закрывает лайтбокс jQuery.

Safari / Chrome действуют аналогично, они открывают новый экран браузера (not sure if theres an option to say target="_newtab" or something?). Плохо только то, что они не отображают сообщение о блокировке всплывающего окна, но я могу обойти это, отобразив всплывающее окно на моем веб-сайте со ссылкой на страницу.

Internet Explorer - то, что шокирует, единственная оставшаяся в заблуждении овца. IE не открывает новое всплывающее окно и не блокирует сброс window.top.location с помощью iFrame и просто продолжает обновлять всю страницу до "#targetURL". Он делает то же самое с кодом очистки по умолчанию... так что это не из-за некоторых моих правок.

Кто-нибудь, кто может обнаружить ошибку в моем коде?

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

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

2 ответа

Решение

PENDO, я попытался смоделировать весь процесс, который вы описали, ligthbox-jquery, javascript свои собственные коды и контролирует открытие страниц через лайтбокс. Я не мог имитировать вообще, и по мере того, как время истекает, я посылаю предложение расширить спектр возможностей и решений. Я предлагаю заменить страницу перенаправления:

 ...
  redirectUrl = $ ('# redirectUrl'). val ();
 ...
 window.top.location = 'http://www .****. with / ajax / nocontent.php';
 window.open (redirectUrl, "_blank");

Заменяется контейнером DIV, имитирующим страницу, использующим вызовы ajax, принимающим содержимое и перезаписывающим содержимое DIV.

 ...
 $.post(redirectoURL /* or desired URL */, function(data) {
     $('DIV.simulateContent').html(data);
 });
 ...

или же

 ...
 $('DIV.simulateContent').load(redirectoURL);
 ...

Этот подход также позволяет избежать проблемы, когда пользователь даже не покидает вашу страницу, используя адресную строку (как вы сами упомянули).

Извините, позвольте мне дать вам полное решение, но время помешало мне.

PENDO, немного поработав над альтернативами этой проблеме, я нашел настраиваемый плагин лайтбокса jQuery для работы с пользовательскими окнами (iframe, html, inline ajax и т. Д.). Может быть, это поможет. Следующая ссылка:

 http://jacklmoore.com/colorbox/

Если вам не нужен JavaScript, работающий в вашем iframe в IE, вы можете установить атрибут безопасности iframe:

<iframe security="restricted" src="http://domain.com" />

http://msdn.microsoft.com/en-us/library/ms534622(v=VS.85).aspx

Другие вопросы по тегам