完全重述了我的问题:
问题:丢失对使用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的父文件出现问题,但是在从edit.php脚本中的action变量中删除它后,在第二次打开对话框后它仍然会失败并出现相同的错误
有人可以编写一个脚本,按名称迭代iframe,当找到严格的iframe时,将其引用到var吗?我想尝试但不知道如何...
答案 0 :(得分: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替换了这个功能,它对我有用。
更新 您还可以使用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();
}