Как не дать веб-страницам захватить нажатие клавиш с помощью политики Firefox CAPS? - PullRequest
7 голосов
/ 04 апреля 2011

Я устал от сайтов, блокирующих мои CMD + c и CMD + v копирование / вставка. Особенно, когда их код JavaScript позволяет проходить CONTROL + c и CONTROL + v без захвата.

Я хочу использовать новую политику безопасности CAPS в Firefox 4 для создания правила, которое дает «noAccess» любому сайту, пытающемуся захватить onkeypress из обработчиков событий любого элемента, и не дать им прочитать e.which.

Ниже приведен фрагмент кода javascript, который не позволяет мне вставить почтовый индекс в текстовую область, поскольку автору сайта требуется "только цифры" в этом поле, поэтому "CMD + v" (вставка) захватывается и удаляется на пол.

function numbersonly(myfield, e, dec) 
    var key, keychar;

    if (e) key = e.which;
    else return true;

    keychar = String.fromCharCode(key);
    // control keys
    if ((key==null) || (key==0) || (key==8) || 
        (key==9) || (key==13) || (key==27) )
        return true;

    else if ((("0123456789").indexOf(keychar) > -1))
        return true;

    else return false;
}

Тогда код HTML будет иметь:

<INPUT NAME="zipcode" onKeyPress="return numbersonly(this, event)">

Как установить политику в Firefox4, которая отключает возможность сайтов вызывать эту функцию обработчика событий?

Используя расширение «Control de Scripts», я попытался добавить следующий «блок» в политику «по умолчанию», которая затрагивает все сайты, но ни один не помог мне использовать комбинацию мета-ключей Firefox, в то время как фокусировался в текстовом поле. который прослушивает обработчик этого события:

HTMLInputElement.onKeyPress
Window.numbersonly
Window.onKeyPress
Window.onkeypress
event.preventDefault

Теперь мы работаем с Firefox 14 вместо 4. Была ли сделана поддержка такого типа noAccess более доступной / доступной для конечных пользователей Firefox, таких как я?

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

Ответы [ 3 ]

3 голосов
/ 03 августа 2012

Почему бы не переопределить функцию так, чтобы она ничего не делала. Откройте консоль javascript в Mozilla и просто переопределите функцию-нарушитель.

numbersonly = function (a,b,c) {
  return true; 
}; 
2 голосов
/ 05 августа 2012

Если есть функция, которая вас раздражает, просто откройте консоль javascript и переопределите функцию.
Чтобы открыть его в FireFow, нажмите Ctrl + Shift + K

1 голос
/ 06 августа 2012

Просто добавив строку в файл политики:

// This line creates a new policy named "stopnums"
user_pref("capability.policy.policynames", "stopnums");
// Add the offending site to the stopnums policy
user_pref("capability.policy.stopnums.sites", "http://www.exemple.com");
// Set the stopnums policy to deny a site from accessing "numbersonly"
user_pref("capability.policy.stopnums.numbersonly", "noAccess");

Обзор вы можете найти здесь: https://developer.mozilla.org/en-US/docs/Mozilla/Preferences/A_brief_guide_to_Mozilla_preferences?redirectlocale=en-US&redirectslug=A_Brief_Guide_to_Mozilla_Preferences#modifying

И полное объяснение здесь: http://www.mozilla.org/projects/security/components/ConfigPolicy.html

...