У меня есть сайт, на котором я хочу предотвратить перезагрузку страницы, используя document.location в теге script. Как я могу сделать это в Firefox?
4 ответа
На самом деле, Greasemonkey не будет блокироваться, если HTML-код содержит встроенный блок javascript с перенаправлением следующим образом:
<script type="text/javascript">
var url = "http://google.com";
document.location.replace(url);
</script>
Greasemonkey, однако, может использоваться для блокировки вызовов определенных функций - просто перезаписать их :). Если вышеупомянутое было заключено в вызов функции следующим образом:
<script type="text/javascript">
function redirect_to(url)
{
document.location.replace(url);
}
</script>
Тогда вы можете просто переопределить функцию в Greasemonkey:
function redirect_to(url){ return true }
Блокировать встроенные перенаправления через Firefox
По сути, Firefox позволяет блокировать любые манипуляции с DOM, такие как location.href.replace
с определенного сайта с помощью так называемых: Конфигурируемых политик безопасности (CAPS).
Предупреждение: обратите внимание, что ваши настройки безопасности будут блокировать ВСЕ звонки с этого домена для location.href.replace
. Если какое-либо приложение использует этот вызов, невозможно разрешить некоторые вызовы и заблокировать другие.
Настройка CAPS для блокировки location.href.replace
Вам не нужен Greasemonkey для этой задачи. Firefox поставляется со встроенной возможностью разрешать / запрещать доступ к свойствам / методам объектов DOM для каждого сайта. Это называется настраиваемой политикой безопасности (CAPS) и описано в 1.
Краткое руководство, предполагающее простейший случай:
- Закрыть Firefox
- Найдите папку вашего профиля
- Найдите файл user.js в этой папке. Если он не существует, создайте его с помощью текстового редактора (Блокнот, VIM и т.д.)
Добавьте следующие строки в user.js:
user_pref ("ability.policy.policynames "," noframebuster "); user_pref ("ability.policy.noframebuster.sites "," http://www.annoying-site.com "); user_pref ("capability.policy.noframebuster.Location.replace "," noAccess ");
Конечно, вам придется заменить домен тем, который вы хотите предотвратить перенаправлением ваших фреймов.
Найдите более подробное объяснение в моем блоге (justaddwater.dk): Совет по Firefox для фреймбастера JavaScript.
Надстройка GreaseMonkey для Firefox предназначена именно для этого.
Если вам удобно использовать функцию отладки, представленную в Firefox, у меня работает метод watch :
document.watch('location', function() {
return '#';
});
Я не уверен насчет применимости предупреждений о производительности и т.д. В MDN, возможно, кто-то имеет некоторое представление о них в этой ситуации.
Попробуйте расширение YesScript.
YesScript позволяет создавать черный список сайтов, на которых не разрешен запуск JavaScript.