javascript – jquery thickbox引用问题

完全重述了我的问题:

问题:使用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();
}
点赞