- Framekiller
-
Framekiller (также называемый framebuster и framebreaker) это код JavaScript не позволяющий отобразить веб-страницу внутри фрейма. Этот код эффективен для того чтобы не позволить встроить свою страницу в чужой документ.
Обычно используют такой вариант кода:
<script type="text/javascript"> if (top != self) top.location.replace(self.location.href); </script>
Этот код успешно используется огромным количеством веб-мастеров по всему миру, однако имеет и некоторые недостатки
Анти-framekiller’ы
Приведенный выше код можно обезвредить при помощи JavaScript соединяющегося с сервером который отвечает ошибкой HTTP/1.1 204 No Content. Этот код следует разместить в главном документе. Он работает потому, что большинство браузеров в ответ на 204 ошибку HTTP ничего не делают, то есть оставляют загруженной нашу страницу.
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);
Другое решение
Другое решение состоит в том, чтобы дать пользователю решить, остановить ли работу скрипта.
var framekiller = true; window.onbeforeunload = function() { if(framekiller) { return "..."; // Сообщение пользователю } };
а этот код должен быть изменен так, чтобы вместо my_frame был id целевого фрейма
document.getElementById("my_frame").onload = function() { framekiller = false; };
Кроме того
В 2010 году была опубликована следующая красивая версия кода:
<style> html{display : none ; } </style> <script> if( self == top ) { document.documentElement.style.display = 'block' ; } else { top.location = self.location ; } </script>
Ее можно обойти, меняя стили с помощью своего кода.
Категории:- Веб-программирование
- JavaScript
Wikimedia Foundation. 2010.