2011-06-09 29 views
-1

說明:父框架是頁面X,子框架位於頁面X內。 問題是行爲緩慢並且從未觸及清除間隔的代碼段。setTimeout()導致放緩並且不能正常退出

我有一個父母和chilframe。在父對象中創建一個對象,然後在子框架中使用setTimeout()來調用父對象以將其自身添加到父對象內部的集合中。

該代碼似乎不像預期的那樣運行,瀏覽器的響應速度非常慢。對這個問題有什麼想法?

父框架

<script type="text/javascript"> 
     var Cert = new Parent(); 
    </script> 

子幀

<script type="text/javascript"> 
     var c; 
     var id = setInterval("Create()", 1000); 

     function Create() 
     { 
      if (parent.Cert != null && parent.Cert != undefined) 
      { 
       c = new Child(parent.Cert, 1, null); 
       clearInterval(id); 
      } 
     } 
    </script> 
+0

我想答案顯然是我的父對象從不實例???但我通過代碼並確認它是。 – 2011-06-09 18:18:11

+1

這是一個模糊的問題。沒有指標,沒有具體......只是「問題」和「似乎沒有按照預期行事」。 – 2011-06-09 18:18:49

+1

'Child'定義在哪裏? – Niklas 2011-06-09 18:18:58

回答

2

不要字符串傳遞給setTimeout/Interval。代之以傳遞函數參考!

var id = setInterval(function() { 
    Create(); 
}, 1000); 

從你這裏提供的代碼,parentwindow。這是你的意圖嗎?似乎有一些相關的代碼在這裏丟失...

至於放緩,也許函數間隔太短,或者它永遠不會滿足?在Child類的構造函數中也可能會出現錯誤,這將使clearInterval行永遠不會被調用。你可以考慮在那裏放一個限制器,或者把你的實例化包裝到try...catch塊中,或者將clearInterval語句移到創建對象的那一行的上方。

或者說,做所有這些事情:

var c = null; 
    var id = setInterval(function() { 
     Create(); 
    }, 1000); 

    var itr = 0; 
    function Create() { 
     // if it has looped more than 20 times, forget it 
     if (itr > 20) { 
      /* show an error message? */ 
      clearInterval(id); 
      return false; 
     } 

     if (parent.Cert != null && typeof parent.Cert != 'undefined') { 
      // clear the interval first 
      clearInterval(id); 
      // safely create object 
      try { 
       c = new Child(parent.Cert, 1, null); 
      } catch (e) { 
       /* handle exception here */ 
      } 
     } else { 
      // incrementing the interval counter 
      itr++; 
     } 
    } 
+0

我幾乎不知道任何關於javascript術語。如果窗口指的是瀏覽器窗口顯示的頁面,那麼是的。 – 2011-06-09 18:26:24

+0

也爲什麼你建議這樣做呢? – 2011-06-09 18:26:54

+0

是的,'window'是引用頁面本身的DOM對象。它是在該頁面上實例化的任何對象的默認父對象。 – 2011-06-09 18:27:20

相關問題