Я работаю над большой таблицей 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);
Я пробовал множество подходов, чтобы заставить страницу принять значение, например:
- jNode.submit (); или jNode [0] .submit (); Однако, поскольку нет элемента обтекания формы, мне не повезло с таким подходом. Я предполагаю, что страница прослушивает изменения, используя AJAX?
- Все варианты имитации 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, легко воспроизвести то, что я пытаюсь сделать. Я был бы очень благодарен за любой вклад!
Большое спасибо, Крис