Scriptish脚本需要刷新页面才能运行?

时间:2013-06-29 22:10:40

标签: javascript greasemonkey userscripts scriptish

此脚本有助于在线商店的结帐流程。一切正常,除了需要刷新页面以使程序最初运行。

我想知道它是否是缓存问题,因为它适用于以前查看过的其他产品。我也尝试修补@run-at无济于事。我正在使用 Scriptish 扩展名,它是一个独立的.js文件。

// ==UserScript==
// @id             proper-id
// @name           proper-name
// @version        1.0
// @namespace      
// @description    
// @include        proper-url-here
// @include about:blank
// @run-at window-load
// ==/UserScript==

for (var i=0; i<document.getElementsByName("skuAndSize")[0].length; i++){
    if(document.getElementsByName("skuAndSize")[0].options[i].text == 11) {
        document.getElementsByName("skuAndSize")[0].selectedIndex = i;
    }
}
document.getElementsByClassName("button-container add-to-cart")[0].click();

为什么此用户只能在刷新时运行?

1 个答案:

答案 0 :(得分:1)

这是一个经典问题,页面通过AJAX更改其内容 @run-at无效,因为目标内容会在窗口load事件后很久加载。并且,“新”页面实际上是通过AJAX重写 - 直到你刷新页面,至少。

将脚本更改为@run-at document-end(或省略该行),然后,根据目标页面以及您使用它的方式,如hashchange所示,触发// ==UserScript== // @name _YOUR_SCRIPT_NAME // @include http://YOUR_SERVER.COM/YOUR_PATH/* // @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js // @require https://gist.github.com/raw/2625891/waitForKeyElements.js // ==/UserScript== waitForKeyElements ("[name='skuAndSize']", setSizeIndex); waitForKeyElements (".button-container.add-to-cart", clickAddToCart); function setSizeIndex (jNode) { var node = jNode[0]; for (var J = node.options.length - 1; J >= 0; --J) { if (node.options[J].text == "11") { node.selectedIndex = J; break; } } } function clickAddToCart (jNode) { var clickEvent = document.createEvent ('MouseEvents'); clickEvent.initEvent ('click', true, true); jNode[0].dispatchEvent (clickEvent); } 可能就足够了{3}}或"I have to refresh the page for my Greasemonkey script to run?"上显示的内容。

然而,转到工具是this other answer。您的脚本可能非常简单:

{{1}}


另见waitForKeyElementsMore info