Использование Greasemonkey и jQuery для увеличения таблиц Google путем изменения значения соответствующего поля ввода - PullRequest
0 голосов
/ 10 января 2020

Я работаю над большой таблицей Google, и увеличение в 65% оказывается оптимальным для отображения всего релевантного контента на моем экране. Поскольку ручная настройка масштаба каждый раз утомительна, а Google, похоже, не предлагает для меня способ сохранения данного масштаба, я пытаюсь использовать Greasemonkey и jQuery для увеличения при загрузке страницы.

С помощью следующего кода я только дохожу до точки ввода значения (ожидая появления элемента с помощью известной функции waitForKeyElements и затем изменяя его значение), но мне все еще нужно вручную нажать Enter для подтверждения , До сих пор я не мог заставить страницу принять введенное значение программно.

// ==UserScript==
// @name     Google Table Auto Zoom
// @include  https://docs.google.com/spreadsheets/d/1SjL_dgsxzj9y7E3JRBYR9gRxiM0ieMkbrGdybAstyt8/*
// @require  https://code.jquery.com/jquery-3.4.1.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @version  2020
// ==/UserScript==

var done = false;

function zoomout(jNode) {
    if (done == false) {
      done = true;
      jNode.val("65%").focus();
    }
}

waitForKeyElements ('.goog-toolbar-combo-button-input[aria-label="Zoom"]', zoomout);

Я пробовал множество подходов, чтобы заставить страницу принять значение, например:

  1. jNode.submit (); или jNode [0] .submit (); Однако, поскольку нет элемента обтекания формы, мне не повезло с таким подходом. Я предполагаю, что страница прослушивает изменения, используя AJAX?
  2. Все варианты имитации Enter, использующие различные результаты стекового потока, о том, как имитировать нажатия клавиш в jQuery (см. Примеры ниже). Однако страница не реагирует ни на один из них, хотя InspectElement показывает, что элемент прослушивает события нажатия клавиш и нажатия клавиш, которые я просто не могу вызвать.
var e = jQuery.Event("keypress");
e.which = 13;
e.keyCode = 13;
jNode.trigger(e);

или

const ke = new KeyboardEvent("keydown", {
    bubbles: true, cancelable: true, keyCode: 13
});
document.body.dispatchEvent(ke); // doesnt work
jNode.dispatchEvent(ke) // doesnt work either

Кажется, ничего из вышеперечисленного не работает. Используя предоставленный код и приведенный в нем пример электронной таблицы c, легко воспроизвести то, что я пытаюсь сделать. Я был бы очень благодарен за любой вклад!

Большое спасибо, Крис

...