Tampermonkey选择下拉值。它没有ID或名称,只是一个类?

时间:2017-01-02 03:25:34

标签: jquery select greasemonkey userscripts tampermonkey

我为ConverTo这样的网页编写了一个Tampermonkey代码:
它应该在下拉列表中自动选择第二个选项:

<select class="format-select">
    <option value="mp3">MP3</option>
    <option value="mp4">MP4 (video)</option>
</select>

,页面完全加载后几秒钟 但没有任何反应。

我的代码:

......
// @match      https://www.converto.io/*
// @require    http://code.jquery.com/jquery-1.11.0.min.js
// ==/UserScript==

$(document).ready(function(){
setTimout(test(),10000); 
function test() 
{ 
    $(".format-select").val('mp4'); 
}
})();

请帮忙!

1 个答案:

答案 0 :(得分:4)

请参阅Choosing and activating the right controls on an AJAX-driven site 许多AJAX驱动的控件不能只是改变;他们还必须接收关键事件,以便页面设置所需的状态。

ConverTo 案例中,该选择似乎期待

  1. 点击事件。
  2. 价值变动。
  3. 改变事件。
  4. 您可以使用这个完整的工作脚本代码发送该序列:

    // ==UserScript==
    // @name     _ConverTo, Automatically select mp4
    // @match    https://www.converto.io/*
    // @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
    // @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
    // @grant    GM_addStyle
    // ==/UserScript==
    //- The @grant directive is needed to restore the proper sandbox.
    
    waitForKeyElements (".format-select:has(option[value=mp4])", selectFinickyDropdown);
    
    function selectFinickyDropdown (jNode) {
        var evt = new Event ("click");
        jNode[0].dispatchEvent (evt);
    
        jNode.val('mp4');
    
        evt = new Event ("change");
        jNode[0].dispatchEvent (evt);
    }
    

    可能还有其他状态序列可用于同一目的。