Я работал над уничтожением фреймов (что зовется именем, хе-хе), который держал моих пользователей на моей странице и открывал новое окно с целевым 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.
Заранее спасибо.