【问题标题】:Changing dropdown options in a website with Firefox and Greasemonkey使用 Firefox 和 Greasemonkey 更改网站中的下拉选项
【发布时间】:2015-05-13 18:46:36
【问题描述】:

我想更改我使用的网站的下拉菜单中的选项,以增加它在表格中显示的行数。由于我使用 Firefox,所以我的想法是使用 GreaseMonkey,但我遇到了麻烦,因为这方面的大多数资源都是在 backward-compatibility breakingGM 2.0 updatebecause jQuery is involved 之前编写的,而且还因为我的 JS 知识非常适合一个别针。

Here's the full HTML code 但相关摘录如下。下拉代码:

<select onchange="set_pagination(this.value)">

    <option value="10"></option>
    <option value="20"></option>
    <option value="30"></option>
    <option value="40"></option>
    <option value="50" selected="selected"></option>

</select>

这里是 set_pagination 函数:

function set_pagination(val) {
        jQuery('#my_word_bank_div').fadeTo('fast', 0.5);
        jQuery.post("/learningcenter/account/set_pagination", {number_of_rows_perpage: val}, function(data){
            if(data.error == "") reload_table(1);
            else alert(data.error);
        }, "json");
    }

我重新定义函数但将val 设置为常数(例如200)的天真解决方案不起作用,可能是由于我滥用unsafeWindow。我确实找到了this similar request,但我不确定它是否适用。

【问题讨论】:

    标签: javascript jquery firefox firefox-addon greasemonkey


    【解决方案1】:

    嗯,我找到了答案。以this answer 为指导,学习了using jQuery to access elements without an idby value 的一些基础知识,我想出了以下简单的Greasemonky 脚本:

    // ==UserScript==
    // @name        ZZZZ
    // @namespace   http://www.example.com*
    // @description Add dropdown option
    // @include     http://www.example.com*
    // @version     1
    // @require     http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
    // @grant       GM_getResourceText
    // @grant       GM_addStyle
    // @grant       GM_xmlhttpRequest
    // @grant       GM_getResourceUR
    // ==/UserScript==
    
    var rowDropdownAddOption = $('[value=50]').after ('<option value="51">Show 51</option>');
    

    这成功添加了我所追求的下拉选项,但是(SPOILER ALERT),当然服务器必须检查参数,并且任何> 50的东西都会被拒绝。当然,这只是显示我在所有事情上的天真网络。我认为这意味着它无法完成,除非有人可以提供其他解决方案。

    【讨论】:

    • 不要将 jQuery 用于这样的事情。 jQuery 是 82kiB 的最小化代码,您正在加载它以保存一些原始 JavaScript 字符。这对您的用户来说不是一个很好的权衡。如果他们在该页面上打开了数百个标签怎么办?你正在做的事情可以很容易地通过document.querySelector('[value=50]').insertAdjacentHTML('afterend', '&lt;option value="51"&gt;Show 51&lt;/option&gt;'); 完成
    • 当您没有描述您实际想要做什么时,我们应该如何“提供一些其他解决方案”。您说过您希望将另一个选项添加到&lt;select&gt;。这段代码就是这样做的。您没有远程提供足够的信息让我们能够为您的实际问题提供解决方案。基本上你的问题是XY problem。从这个问题的角度来看,这实际上并不是一件坏事。问题比较含蓄,有答案。 OTOH,这是一件坏事,因为您的实际问题没有解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2023-01-13
    相关资源
    最近更新 更多