2011-03-07 9 views
0

私はウェブサイト上の画像へのリンクをすべて開くためにjavascriptを使用しています。しかし、約25個のタブを開いた後にスクリプトが停止します。これはおそらくChromeによって引き起こされたものです。 Firefoxを試しましたが、フリーズしてしまいます(IEで試してみることもできません)。スクリプトを各タブ間で500ミリ秒待機させようとしましたが、スクリプトを遅くする以外に何も変わりませんでした。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

それだけで個人的なスクリプトではなく、ウェブサイトの機能 – Jimmy

+1

が@Mattが鳴ったときに、なぜあなたはスリープ機能を作成しなかったようなものにあなたの最後のループを変更することができますああ神 - @ジミーの権利。これはブラウザを駄目にしている 'sleep'関数です。 ** ['setTimeout'](https://developer.mozilla.org/en/DOM/window.setTimeout)または[' setInterval'](https://developer.mozilla.org/en/DOM/)を使用する必要がありますwindow.setInterval)。** – Jimmy

+0

だようにあなたは可能性がちょうど 'setInterval'または' setTimeout' –

答えて

3

それは明らかスクリプトブレーカーのように思えるので、あなたのsleep()機能だけsetIntervalまたはsetTimeoutあなたのリンクのオープニング機能を交換してください。あなたはこの

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); 
     } 
    } 
関連する問題