Javascript 使用Greasemonkey和jQuery通过更改相应输入字段的值来缩放Google电子表格

Javascript 使用Greasemonkey和jQuery通过更改相应输入字段的值来缩放Google电子表格,javascript,jquery,greasemonkey,Javascript,Jquery,Greasemonkey,我在一个大型谷歌电子表格上进行协作,65%的缩放恰好是在屏幕上显示所有相关内容的最佳选择。由于每次手动设置缩放都很乏味,而且谷歌似乎没有为我提供存储给定缩放的方法,因此我尝试使用Greasemonkey和jQuery在页面加载时进行缩放 使用下面的代码,我只需要输入值(使用著名的waitforkyellements函数等待元素出现,然后更改其val),但我仍然需要手动点击Enter进行确认。到目前为止,我无法让页面以编程方式接受输入的值 // ==UserScript== // @name

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

使用下面的代码,我只需要输入值(使用著名的waitforkyellements函数等待元素出现,然后更改其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);

我尝试了多种方法让页面接受该值,例如:

  • jNode.submit();或jNode[0]。提交();然而,由于没有包装表单元素,所以我对这种方法并不幸运。我猜页面会使用AJAX监听更改
  • 关于如何在jQuery中模拟按键,所有模拟的变体都使用各种stackoverflow结果进行输入(参见下面的示例)。然而,即使InspectElement显示该元素监听按键和按键事件,页面也不会对其中任何一个做出反应,我只是无法触发这些事件

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

    多谢各位,
    Chris

    尝试为每个字符发射一个
    按键
    事件,首先是6,5%,谢谢@wOxxOm!不幸的是,我甚至不能得到要键入的第一个字符。也许谷歌只是因为“不信任”的问题而不接受任何模拟按键?我当前测试它的代码:jNode.focus().trigger(jQuery.Event('keypress',{keycode:54}));//工作到焦点();部分,但不会引发实际的键入,而使用键盘手动键入是可行的。我认为您应该使用本机DOM dispatchEvent而不是jQuery。似乎不可能在输入字段上模拟键入:(请参阅-是否有其他方法告诉电子表格页面更改缩放?document.execCommand应注意这一点,请尝试按每个字母使用它。
    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