2010-11-05 20 views
1

我發展我第一次的Greasemonkey腳本(試圖編輯和添加頁面內容到一個特定的網站),由於某種原因,它拒絕超出一個while循環工作..如:循環中的GreaseMonkey

var anchorTag = window.document.getElementsByTagName('a'); 
var anchorTagNumber = window.document.getElementsByTagName('a').length; 
.. 
.. 
i = 0 
j = 0; 
function collectId(i,link) { 
    linkArray[j] = new Array(2); 
    linkArray[j][0] = i; 
    linkArray[j][1] = link; 
    j++; 
} 


while(i <= anchorTagNumber) 
{ 
    testHref = anchorTag[i].href; 
    testHTML = anchorTag[i].innerHTML; 
    patHref = /some regex/; 
    patCaptureId = /some regex/; 
    testId = patCaptureId.exec(testHref); 
    patHTML = /some regex/; 
    patHTML2 = /some regex/; 
    patHTML3 = /some regex/; 
    if(patHref.test(testHref) && !patHTML.test(testHTML) && !patHTML2.test(testHTML)) 
    { 
     linkId = testId[1]; 
     collectId(i,linkId); 
    } 
    i++; 
} 

此循環結束後的任何內容都拒絕工作。即使是一個簡單的alert似乎並沒有執行。我有另一個while循環具有類似的結構,如果我先放一個,它會執行,而這個不會。有任何想法嗎 ?提前致謝 !

+0

您是否嘗試在循環中添加一些警報以查看它在哪個點失敗?副手,我會猜測這位執行官。 – 2010-11-05 07:57:18

+0

也可以嘗試使用Firefox並使用錯誤控制檯,除非Chrome具有相同的功能。 – 2010-11-05 07:58:54

+1

爲什麼你會得到錨定標記兩次?只需使用'var anchorTagNumber = anchorTag.length'來提高效率。並找出什麼問題可能添加'console.log(我,anchorTagNumber)'到while循環。 – 2010-11-05 09:02:09

回答

3

最明顯的問題是數組被超載,這會導致腳本出錯。

這個:while(i <= anchorTagNumber)
應該是:while(i < anchorTagNumber)
如果陣列具有長度5,例如,它的最後一個元素將具有4

另外一個索引,這一點:

var anchorTag = window.document.getElementsByTagName('a'); 
var anchorTagNumber = window.document.getElementsByTagName('a').length; 


可以被簡化爲:

var anchorTag  = window.document.getElementsByTagName('a'); 
var anchorTagNumber = anchorTag.length; 


這會稍微加快代碼的速度,但也使未來的代碼維護或重用更容易。

+0

你也可以擺脫'window.' – 2010-11-10 09:58:00

+0

非常感謝..明白了.. – 0xff0000 2010-11-10 16:08:37

1

而不是使用一段時間,你可以嘗試setInterval來每100毫秒調用一次函數。

interval = setInterval(function(){ 
    iDidIt = doSomethin() 
    if(iDidIt){ 
     clear interval; 
    } 
},100)