0

我在一个大型的 Google 电子表格上进行了协作,并且 65% 的缩放恰好最适合在我的屏幕上显示所有相关内容。由于每次手动设置缩放都很乏味,并且由于 Google 似乎没有为我提供存储给定缩放的方法,所以我尝试使用 Greasemonkey 和 jQuery 来缩放页面加载。

使用以下代码,我只需要输入值(使用著名的 waitForKeyElements 函数等待元素出现,然后更改其 val),但我仍然需要手动按 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. 使用有关如何在 jQuery 中模拟按键的各种 stackoverflow 结果来模拟 Enter 的所有变体(请参阅下面的示例)。但是,即使 InspectElement 显示该元素侦听 keypress 和 keydown 事件,页面也不会对它们中的任何一个做出反应,而我只是无法触发这些事件。
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

以上似乎都不起作用。使用提供的代码和其中的公共电子表格示例,应该很容易重现我正在尝试做的事情。我将非常感谢任何输入!

非常感谢,克里斯

4

0 回答 0