2011-03-07 26 views
0

我使用的是javascript來打開網站上圖像的所有鏈接。但是腳本在打開大約25個選項卡後停止,這可能是由Chrome導致的。我試過Firefox,但它凍結了(所以我甚至不敢在IE中試用它)。我試圖讓腳本在每個選項卡之間等待500毫秒,但除了使腳本變慢之外,沒有任何改變。使用javascript一次打開25個選項卡

關於如何解決這個問題的任何建議?當前一個完全加載時,是否可能有某種方法可以打開下一個選項卡?

function in_array(needle, haystack) { 
    var key = ''; 
    for (key in haystack) { 
     if (haystack[key] == needle) { 
      return true 
     } 
    } 
    return false 
} 
function sleep(milliseconds) { 
    var start = new Date().getTime(); 
    for (var i = 0; i < 1e7; i++) { 
    if ((new Date().getTime() - start) > milliseconds){ 
     break; 
    } 
    } 
} 
var allLinks = document.links; 
var allHrefs = []; 
var openedWindows = []; 
var x = 0; 
var y = 0; 
for (var i = 0; i < allLinks.length; i++) { 
    if (allLinks[i].href.match(/\.(jpg|png|jpeg|gif|bmp)$/i)) { 
     allHrefs[x] = allLinks[i].href; 
     x++ 
    } 
} 
for (var i = 0; i < allHrefs.length; i++) { 
    if (!in_array(allHrefs[i], openedWindows)) { 
     openedWindows[y] = allHrefs[i]; 
     y++; 
     sleep(500); 
     window.open(allHrefs[i]) 
    } 
} 
+2

你爲什麼要創建一個睡眠功能時,你可能只是'setInterval'或'setTimeout' – Jimmy

+1

@馬特聽起來像它只是一個個人的腳本,而不是一個網站功能 – Jimmy

+0

哦,上帝 - @吉米的權利。這是'睡眠'功能,顛覆瀏覽器。 **你必須使用['setTimeout'](https://developer.mozilla.org/en/DOM/window.setTimeout)或['setInterval'](https://developer.mozilla.org/en/DOM/ window.setInterval)** –

回答

3

因爲它似乎是顯而易見的腳本斷路器,更換你的sleep()功能,只是setIntervalsetTimeout您的鏈接打開的功能。您可以將您的最後一個循環改變這樣的事情

for (var i = 0; i < allHrefs.length; i++) { 
     if (!in_array(allHrefs[i], openedWindows)) { 
      openedWindows[y] = allHrefs[i]; 
      y++; 
      setTimeout(window.open(allHrefs[i]), 500); 
     } 
    } 
相關問題