Javascript 使用类似Greasemonkey的脚本自动选择每页的项目(下拉列表)

Javascript 使用类似Greasemonkey的脚本自动选择每页的项目(下拉列表),javascript,greasemonkey,greasekit,fluid-mac-app-engine,Javascript,Greasemonkey,Greasekit,Fluid Mac App Engine,如果你看一下,有一个下拉列表显示每页的结果:可以是10、20或50 我想一个脚本来模拟选择每页50 为便于参考,此处提供了一些HTML: 每页102050 请问我怎样才能做到这一点 编辑 超过20项 这是给Greasekit的(它很旧,但我只能使用它)。布罗克可靠地告诉我,它非常旧,不再更新。(我甚至不认为我可以使用jQuery)因为这个选择是由jQuery驱动的,所以可以使用jQuery来更改它并触发所有必要的javascript 但是您的Greasemonkey脚本必须使用or,因为您需要

如果你看一下,有一个下拉列表显示每页的结果:可以是10、20或50

我想一个脚本来模拟选择每页50

为便于参考,此处提供了一些HTML:

每页
102050
请问我怎样才能做到这一点

编辑 超过20项


这是给Greasekit的(它很旧,但我只能使用它)。布罗克可靠地告诉我,它非常旧,不再更新。(我甚至不认为我可以使用jQuery)

因为这个选择是由jQuery驱动的,所以可以使用jQuery来更改它并触发所有必要的javascript

但是您的Greasemonkey脚本必须使用or,因为您需要触发页面的javascript函数

的完整脚本如下所示:

// ==UserScript==
// @name        _Amazon-like store, auto select 50 items per page
// @include     https://dl.dropboxusercontent.com/u/5546881/*
// @grant       none
// ==/UserScript==

//-- $ not defined. Use jQuery
jQuery('#v_pagination_long select').val (50).trigger ('change');


更新: 由于OP没有真正使用Greasemonkey或类似Tampermonkey的现代版本,因此不支持
@grant none

下面是使用的相同脚本,它几乎适用于任何浏览器+用户脚本引擎组合:

// ==UserScript==
// @name        _Amazon-like store, auto select 50 items per page
// @include     https://dl.dropboxusercontent.com/u/5546881/*
// @grant       GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/
function GM_main () {
    jQuery('#v_pagination_long select').val (50).trigger ('change');
}

addJS_Node (null, null, GM_main);

function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
    var D                                   = document;
    var scriptNode                          = D.createElement ('script');
    if (runOnLoad) {
        scriptNode.addEventListener ("load", runOnLoad, false);
    }
    scriptNode.type                         = "text/javascript";
    if (text)       scriptNode.textContent  = text;
    if (s_URL)      scriptNode.src          = s_URL;
    if (funcToRun)  scriptNode.textContent  = '(' + funcToRun.toString() + ')()';

    var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    targ.appendChild (scriptNode);
}


重要提示:

  • 该示例页面最多显示9项,因此不可能100%确定脚本正在完成所需的所有操作。通过OP的新示例页面,验证了该脚本可以在FF+GM和Chrome+TM上运行
  • 被包装在一个div中,id为:
    v_pagination_long
    。用它来帮助获得正确的控制
  • 该页面使用各种鼠标事件(不是单击),因此可能需要更多有状态的方法(无法确定,请参见第1项)。在这种情况下,演示页面不需要。有关其他页面,请参阅

  • 谢谢不过,我并没有完全使用Greasemonkey;我正在使用一种叫做Greasekit的东西(非常类似)。关于第2点,我有另一个示例页面可以尝试,它有几百个条目。(虽然这不是公开的)。再说一次,关于第2点,我该怎么做呢?(我是Javascript的新手)。它是否类似于
    document.getElementsByDiv
    ?[经研究,这不是一个真正的命令…]那
    document.getElementById(“id”)
    该死,我测试过了,它似乎不起作用。我刚刚读了你所有的脚注,可能是因为[3](它使用鼠标事件)。关于[4],我将创建一个包含更多项目的新页面,以便对其进行全面测试。非常感谢你!你没有在问题中指定Greasekit!我在FF+GM中测试了这个脚本,它运行正常。它也应该在Chrome+浏览器中工作。至于Greasekit,据我所知,它已经5年没有更新了。我认为it或Ninjakit不支持
    @grant none
    ,所以需要使用脚本注入。请参阅我在答案中链接的问题。更新了答案。即使对于Greasekit也应该有效。不确定是否在流体中。您的示例页面使用jQuery。如果您的Fluid应用程序运行相同类型的页面,那么您的用户脚本也可以使用页面的jQuery。
    // ==UserScript==
    // @name        _Amazon-like store, auto select 50 items per page
    // @include     https://dl.dropboxusercontent.com/u/5546881/*
    // @grant       GM_addStyle
    // ==/UserScript==
    /*- The @grant directive is needed to work around a design change
        introduced in GM 1.0.   It restores the sandbox.
    */
    function GM_main () {
        jQuery('#v_pagination_long select').val (50).trigger ('change');
    }
    
    addJS_Node (null, null, GM_main);
    
    function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
        var D                                   = document;
        var scriptNode                          = D.createElement ('script');
        if (runOnLoad) {
            scriptNode.addEventListener ("load", runOnLoad, false);
        }
        scriptNode.type                         = "text/javascript";
        if (text)       scriptNode.textContent  = text;
        if (s_URL)      scriptNode.src          = s_URL;
        if (funcToRun)  scriptNode.textContent  = '(' + funcToRun.toString() + ')()';
    
        var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
        targ.appendChild (scriptNode);
    }