2013-10-18 81 views
0

這是意外的。我使用Chrome作爲我的主要開發瀏覽器,並大量使用「console.log」(比警報更好)提交頁面後Chrome瀏覽器JavaScript控制檯爲空

無論如何,我有一個IFrame內部的頁面(用於上傳圖片)。該頁面包含經常寫入控制檯窗口(console.log)的腳本以用於跟蹤目的。父頁面首次通過腳本提交嵌入式頁面時,一切都很順利。如果我,但是,然後嘗試提交頁面第二次我得到的錯誤...

Uncaught TypeError: Cannot call method 'log' of null 

突然似乎控制檯不再可用的全部。如果我將其替換爲警報,警告框將按預期顯示,但該頁面不再提交。

有沒有人經歷過這樣的事情?

+0

我真的希望沒有人把'console = null'放在由'iframe'調用的另一個腳本中:) – marteljn

+0

那......這是一個人的項目。廚房裏沒有其他廚師。 form.submit()在第一次提交之後也不起作用。 –

+0

你可以創建一個小提琴或提供一個鏈接或一些代碼,以便其他人可以重現? –

回答

1

我想感謝人們的迴應。我沒有在OP中包含任何代碼,因爲它是一個廣泛的腳本,並解析了我正在嘗試做的事情的一個「示例」,以便通過它並不太繁瑣,可能會排除任何相關性。

我發佈了,但是要說我確實發現了這個問題。

我有PageA,它包含一個IFrame,然後加載PageB。

<html> 
<head><title>PageA</title></head> 
<body> 

    <IFrame src="PageB" name="frame1" id="frame1"></IFrame>  

</body> 
</html> 

PageB包含一個函數,當按鈕被點擊時需要從PageA中調用該函數。

<!-- PageB --> 
    <html> 
    <head><title>PageB</title></head> 
    <body> 
    <form id="form1" name="form1" > 

    </form> 
    <script> 

     var SubmitForm = function(){ 
      var $form = $("form[id$='form1']"); 
      $form[0].submit(); // this was not firing 
      console.log("some log output"); // this was throwing an error 
     }; 

    </script> 
    </body> 
    </html> 

<!-- PageA --> 
    <html> 
    <head><title>PageA</title></head> 
    <body> 

    <IFrame src="PageB" name="frame1" id="frame1"></IFrame> 
    <button onclick="submitIFrameForm()">Submit</button> 

    <script> 
     var frameWindow = frames["frame1"]; 
     var frameForm  = frameWindow.SubmitForm; 

     function submitIFrameForm(){ 
      frameForm(); 
     }; 
    </script> 
    </body> 
    </html> 

技術問題

當網頁A 第一負載,該IFrame加載網頁B和在網頁A腳本使得它的參考(frameForm)到「SubmItForm()」在網頁B上的功能。當我點擊PageA中的提交表單按鈕時,PageB被提交回服務器。沒問題...

但是,當PageB被取消時,它將從窗口卸載。因此,當我再次單擊PageA中的 提交按鈕時,雖然PageB可能會重新加載它,但它是頁面的另一個實例。因此,引用原始PageB的所有變量現在都指向空白,因此控制檯引用的窗口不再存在,因此「日誌」方法無法運行。

THE FIX

而不是創建一個全球性的參考iframe的內容,我們必須在每次單擊按鈕時重新建立這種參考作用。 (由於IFrame是PageA的成員,我們不需要重新建立IFrame參考)。

<!-- PageA --> 
    <html> 
    <head><title>PageA</title></head> 
    <body> 

    <IFrame src="PageB" name="frame1" id="frame1"></IFrame> 
    <button onclick="submitIFrameForm()">Submit</button> 

    <script> 
     var frameWindow = frames["frame1"]; 

     function submitIFrameForm(){ 
      frameWindow.SubmitForm(); // move the reference to the click event handler 
     }; 
    </script> 
    </body> 
    </html> 

我希望這是有道理的,它可以幫助那裏的人。我不斷遇到這種事情。

相關問題