2016-03-25 2 views
0

Я создал пользовательский скрипт для периодического удаления истории из Google Chrome. Самый простой способ, который я мог придумать, - установить Clear Cachehttps://chrome.google.com/webstore/detail/clear-cache/cppjkneekbjaeellbfkmgnhonkkjfpdn?hl=en, который позволяет вам настроить сочетание клавиш для удаления истории. Я установил ярлык alt+9Событие триггерной клавиатуры с помощью greasemonkey или tampermonkey

Это код, который я использую для запуска события alt+9, когда я открываю желаемую веб-страницу.

var event = document.createEvent('Event'); 
event.initEvent('keydown', true, true); 
event.keyCode = 18&&57; 
document.body.dispatchEvent(event); 

История не очищается, когда я посещаю целевой сайт, и я не уверен, почему. Является ли событие, которое я отправил, не то же самое, что нажатие alt+9? При ручном нажатии alt+9 ярлык действительно работает.

Edit: Также пробовал

// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js 
// @grant  GM_info 

    var press = jQuery.Event("keypress"); 
press.altKey = true; 
press.which = 57; 
$("whatever").trigger(press); 

function GM_main ($) { 
    //alert ('jQuery is installed with no conflicts! The version is: ' + $.fn.jquery); 
} 

if (typeof jQuery === "function") { 
    console.log ("Running with local copy of jQuery!"); 
    GM_main (jQuery); 
} 
else { 
    console.log ("fetching jQuery from some 3rd-party server."); 
    add_jQuery (GM_main, "2.2.2"); 
} 

function add_jQuery (callbackFn, jqVersion) { 
    var jqVersion = jqVersion || "2.2.2"; 
    var D   = document; 
    var targ  = D.getElementsByTagName ('head')[0] || D.body || D.documentElement; 
    var scriptNode = D.createElement ('script'); 
    scriptNode.src = 'http://ajax.googleapis.com/ajax/libs/jquery/' 
        + jqVersion 
        + '/jquery.min.js' 
        ; 
    scriptNode.addEventListener ("load", function() { 
     var scriptNode   = D.createElement ("script"); 
     scriptNode.textContent = 
      'var gm_jQuery = jQuery.noConflict (true);\n' 
      + '(' + callbackFn.toString() + ')(gm_jQuery);' 
     ; 
     targ.appendChild (scriptNode); 
    }, false); 
    targ.appendChild (scriptNode); 
} 

ответ

2

event.keyCode = 18&&57; делает не работу. Это логическая/логическая операция и результаты фактически находятся в 57, потому что 18 оценивает значение true, поэтому назначается второй операнд.

Также двоичная операция 18&57 не будет представлять alt+9. Чтобы имитировать keydown 9, в то время как Alt-Key удерживается нажатой, вы должны дать keycode из 57 и установить для alt-indicator значение true.

var event = new KeyboardEvent(); 
event.keyCode = 57; 
event.which = 57; 
event.altKey = true; 
event.ctrlKey = false; 
event.shiftKey= false; 
event.target = window; 
window.dispatchEvent(event); 

Это вы можете манипулировать WebApplication, однако, вы можете не функции браузера доступа, так как это может быть сделано с помощью любого веб-сайта, который будет означать высокий риск безопасности.

Скрипты пользователей не намного более привилегированы, чем веб-сайты. Вы можете разработать аддон, чтобы иметь полный доступ к браузеру gui. Существуют шаблоны/шаблоны для разработки аддонов. Это просто JavaScript, зашифрованный в .xpi-файл.

Смежные вопросы