2011-03-20 59 views
4

完全重述我的問題:jQuery的ThickBox的基準問題

問題:失去參考使用Mozilla Firefox 3.6的iFrame和4.0

更多信息: - 在Internet Explorer 8的64位和工程罰款32 bit版本。

如何重現?在Mozilla中:打開編輯器手風琴菜單。點擊'editor openen'鏈接,在編輯器中填入一些隨機文本,然後點擊'bestand opslaan'。填寫一個名字並點擊'保存'。編輯器的內容將以HTML格式下載。

通過點擊外部或指定按鈕關閉保存文件對話框。再次點擊'bestand opslaan'按鈕並嘗試將您的內容保存到文件中。你什麼也看不到。

問題不在IE8中。嘗試在那裏打開它。

螢火告訴我這個你打開保存的第二次對話:

iFrame.document is null 

實例鏈接:http://www.newsletter.c-tz.nl/

更多信息: - 從ThickBox的切換到彩盒,試圖解決這個問題,因爲厚盒子現在已經很長時間不被支持了。 - 顏色盒給我同樣的問題,所以我不認爲這是這樣的。 - 嘗試搜索iframe引用錯誤等,沒有發現任何東西。 - 嘗試將iframe代碼放在由colorbox腳本調用的div的外部,它保留它的引用,但不會在將其放回該div內時引用。

感謝:JohnP提出在此打開'追捕'。

編輯:

我想也許saveFile.php文件造成麻煩的iframe的父,但是從動作變量在editor.php腳本中刪除之後仍然失敗,相同的錯誤後,您第二次打開對話框。

有人可能會寫一個腳本,通過名稱迭代通過iframe,當剛剛iframe被發現引用它的var?我想嘗試它,但不知道如何...

+0

它definitly似乎是被搞亂的東西了Ajax.js文件。在Internet Explorer 8中,當我點擊兩次加載div中的tinyMCE編輯器的textarea的鏈接時,我失去了處理程序。我真的不知道ajax腳本是如何工作的,但我正在考慮尋找另一個腳本,並希望不會發生任何事情。 – 2011-03-20 16:41:14

+0

那麼我刪除了從PHP頁面的腳本,並插入這個漂亮的jquery代碼: – 2011-03-21 00:50:10

+0

以及好評,它似乎不顯示代碼看似是因爲它們不是爲它而製作的。但jQuery代碼堅持11行,並創造奇蹟。現在我可以打開/關閉/打開/關閉thickbox,但是在點擊執行這個問題頂部的jscript的按鈕後,它會丟失iframe的引用變量。 $%)$ *#非常令人沮喪=]但至少我有更乾淨的代碼!談到解決方案。 – 2011-03-21 00:50:31

回答

2

我不能解釋爲什麼它的第一次爲Firefox的工作,但在Firefox中使用的功能來獲取iframe是不同的IE:How to get the body's content of an iframe in Javascript?

所以,更換你的JavaScript函數「的SaveToFile」這樣的:

function saveToFile() { 
    var saveAsFileName = document.getElementById('saveAs_filename').value; 
    var currentContent = tinyMCE.editors["editor_textarea"].getContent(); 
    var editorFileName = document.getElementById('editor_filename'); 

    var iFrameTag = document.getElementById('saveAs_Iframe'); 
    var iFrame; 
    if (iFrameTag.contentDocument) 
    { // FF 
     iFrame = iFrameTag.contentDocument; 
    } 
    else if (iFrame.contentWindow) 
    { // IE 
     iFrame = iFrameTag.contentWindow.document; 
    } 

    var inframeEditorFileName = iFrame.getElementById('editor_filename'); 
    var inframeEditorContent = iFrame.getElementById('editor_textarea'); 

    editorFileName.value = saveAsFileName; 
    inframeEditorFileName.value = saveAsFileName; 
    inframeEditorContent.value = currentContent; 

    iFrame.editor_self.submit(); 
} 

我更換Firebug的功能和它的作品對我來說。

更新: 你也可以使用一個跨瀏覽器的解決方案,更簡單,這要歸功於jQuery的:

function saveToFile() { 
    var saveAsFileName = document.getElementById('saveAs_filename').value; 
    var currentContent = tinyMCE.editors["editor_textarea"].getContent(); 
    var editorFileName = document.getElementById('editor_filename'); 
    editorFileName.value = saveAsFileName; 

    $("#saveAs_Iframe").contents().find("#editor_filename").val(saveAsFileName) 
    $("#saveAs_Iframe").contents().find("#editor_textarea").val(currentContent) 
    $("#saveAs_Iframe").contents().find("form[name=editor_self]").submit(); 
} 
+0

它的工作原理! :哦,那太棒了。我特別喜歡跨瀏覽器的jQuery代碼。非常好。我不知道在Firefox中你必須使用.contentDocument。是非常奇怪,它的作品第一次,但不是第二次..也許是一個棄用的功能或東西。我會確保mozilla的人知道這一點。 – 2011-03-25 11:26:25

+0

和+100代表你解決它! :) – JohnP 2011-03-27 13:08:46

+0

@ C-TZ:很高興幫助。 @JohnP:謝謝:) – 2011-03-27 20:30:57