2015-06-07 2 views
1

для Google Apps Script для Google Docs, в файле Sidebar.html я использую этот код (упрощенно, чтобы удалить ненужные части):Google Apps Script HTML - Как сделать триггер событий клавиатуры из всего документа, а не просто кнопкой?

<div class="sidebar branding-below"> 
    <form> 
    <div class="block" id="button-bar"> 
     <button id="some-action" class="action">Action</button> 
    </div> 
    </form> 
</div> 

<script> 

    $(function() { 
    $('#some-action').click(doSomething);   //call the method below on button click 
    google.script.run.withSuccessHandler(loadPreferences) 
     .withFailureHandler(showError).getPreferences(); //not sure what this does 
    }); 

    $(document).keydown(function(e){    //only applies to button?? 
    //output whatever key was pressed under the button 
    var div = $('<div id="clickmsg" class="text">' + 'KeyPressed: ' + e.which + '</div>'); 
    $('#button-bar').after(div); 
    //Detect CTRL + q keydown combo, which should be unused in windows and chrome 
    if(e.ctrlKey && e.keyCode == 81){ 
     var div = $('<div id="clickmsg" class="text">' + 'Ctrl+Q detected' + '</div>'); 
     $('#button-bar').after(div); 
     doSomething();       //calls the method below 
    } 
    }); 

    function doSomething() { 
    this.disabled = true; 
    $('#error').remove(); 
    google.script.run 
     [some code...] //doStuff 
    } 
</script> 

йоЗотеЬЫпд() срабатывает только тогда, когда я закладками на кнопку. Таким образом, до тех пор, пока кнопка по-прежнему находится под вкладкой, затем под ней отображаются клавиши, которые я нажимаю. Однако при любых обстоятельствах, когда я не привязывался к кнопке, независимо от того, какие клавиши нажаты, этот код нажатия клавиши ничего не выводит.

Обратите внимание, что я использую $ (document) .keydown, но никогда не определяющий «документ» нигде. Однако, как-то он автоматически привязывается к кнопке на боковой панели. Почему это происходит, вместо того, чтобы возвращать ошибку? Как заставить его обнаруживать быстрые клавиши во всех документах google, даже если пользователь просто печатает? Является ли даже правильный способ обнаружения HTML?

Я знаю, что это возможно (возможно) из-за этого сообщения о проблеме, из-за которой я использовал код keybind от issue here, где человек, который опубликовал код носка, сказал, что «новый режим IFRAME в HtmlService разрешает использование ключа коды, которые должны быть переданы надстройкам », если пользователь« щелкнул [ed] on/activate [d] боковую панель в первую очередь ».

ответ

1

Ваш HTML получает завернутый в HTML службе, как это:

<iframe> 
    <!DOCTYPE html> 
    <more boilerplate...> 
    ... 

     your html 

    ... 
</iframe> 

Итак, document определена, и имеет область, ограниченную в iframe. Поскольку у вас есть только один элемент в вашей форме, фокус должен быть там для document для получения событий.

Если вы намерены зафиксировать все нажатия клавиш в Google Doc, вы не сможете сделать это в скрипте Google Apps. Однако расширение браузера может быть.

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