完全重述了我的问题:
问题:使用Mozilla Firefox 3.6和4.0丢失对iFrame的引用
更多信息:
– 在Internet Explorer 8 64位和32位版本中正常工作.
如何重现?在Mozilla中:打开编辑手风琴菜单.单击“编辑器操作”链接,在编辑器中填写一些随机文本,然后单击“bestand opslaan”.填写名称并单击“保存”.编辑器的内容将以HTML格式下载.
通过单击外部或指定按钮关闭保存文件对话框.再次单击“bestand opslaan”按钮,尝试将内容保存到文件中.你会发现什么都没发生.
IE8中没有问题.尝试在那里打开它.
Firebug第二次打开保存对话框时告诉我:
iFrame.document is null
示例链接:http://www.newsletter.c-tz.nl/
更多信息:
– 从thickbox切换到colorbox尝试解决此问题,因为很长时间不支持thickbox.
– colorbox给了我同样的问题所以我不认为这是这个.
– 尝试谷歌搜索iframe引用错误和喜欢,没有发现任何东西.
– 尝试将iframe代码放在colorbox脚本调用的div之外,它保留了引用但不是当我把它放回到div中时.
感谢:JohnP提出打开’追捕’.
编辑:
我想也许saveFile.php文件造成麻烦的iframe的父,但是从动作变量在editor.php脚本中删除之后仍然失败,相同的错误打开第二次对话之后.
有人可以编写一个脚本,按名称迭代iframe,当找到严格的iframe时,将它引用到var吗?我想尝试但不知道如何..
最佳答案 我无法解释为什么它第一次用于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替换了这个功能,它对我有用.
更新:
你也可以使用一个crossbrowser解决方案,更简单,感谢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();
}