2

У меня есть сайт, на котором я хочу предотвратить перезагрузку страницы, используя document.location в теге script. Как я могу сделать это в Firefox?

4 ответа4

2

На самом деле, 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.

Краткое руководство, предполагающее простейший случай:

  1. Закрыть Firefox
  2. Найдите папку вашего профиля
  3. Найдите файл user.js в этой папке. Если он не существует, создайте его с помощью текстового редактора (Блокнот, VIM и т.д.)
  4. Добавьте следующие строки в 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.

1

Надстройка GreaseMonkey для Firefox предназначена именно для этого.

1

Если вам удобно использовать функцию отладки, представленную в Firefox, у меня работает метод watch :

document.watch('location', function() {
    return '#';
});

Я не уверен насчет применимости предупреждений о производительности и т.д. В MDN, возможно, кто-то имеет некоторое представление о них в этой ситуации.

0

Попробуйте расширение YesScript.

YesScript позволяет создавать черный список сайтов, на которых не разрешен запуск JavaScript.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .