2013-06-29 197 views
3

此腳本協助在線商店的結帳流程。所有工作都正常,除了需要刷新頁面才能使程序最初運行。腳本腳本需要刷新頁面才能運行?

我不知道它是否是緩存問題,因爲它適用於以前查看過的其他產品。我也嘗試修改@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

這是一個通過AJAX改變其內容的頁面的經典問題。
@run-at沒有效果,因爲在窗口load事件之後很長時間加載了目標內容。而且,「新」頁面通過AJAX完全重寫 - 至少在刷新頁面之前。

更改腳本@run-at document-end(或省略線),然後根據目標網頁和你如何使用它,它可能足以斷火的hashchange如圖所示"I have to refresh the page for my Greasemonkey script to run?"this other answer,如圖所示。

然而,轉到工具是waitForKeyElementsMore info。你的腳本可以簡單:

// ==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); 
} 


還參見"Choosing and activating the right controls on an AJAX-driven site"

+0

謝謝你!這工作像一個魅力;一個很好的描述和所有啓動。 =)我應該剛剛用jQuery。我也在想,可以實現一個addEventListener()方法,以實現功能達到標準。再次感謝! – zweed4u

+0

不客氣!樂意效勞。 –

相關問題