jquery thickbox引用问题

时间:2011-03-20 11:33:00

标签: javascript reference null document colorbox

完全重述了我的问题:

问题:丢失对使用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吗?我想尝试但不知道如何...

1 个答案:

答案 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();
}