在IE中为什么document.open失败但tempDocument.open成功了?

时间:2015-09-21 17:51:27

标签: javascript internet-explorer iframe

在iframe动态加载内容时,序列select col_name from test where not regexp_like(col_name, '.*[^a-zA-Z0-9 .{}\[\]].*') document.opendocument.write在IE 9,10和11中失败,但在其他浏览器中成功。但是,如果我将document.close分配给临时变量,然后执行documentopenwrite,则IE会成功。这是为什么?

(是的,我知道除了close之外还有更好的选择,比如jquery和DOM构造,但我很好奇为什么会失败。)

以下文件显示问题:

的index.htm

document.open/write/close

frame.htm

<!DOCTYPE html>
<html>
<head>
    <title>Top Window</title>
</head>
<body>
<p>Top Window</p>
<div id="testDiv" style="width: 100%;">
    <iframe src="frame.htm" style="width: 100%;"></iframe>
</div>
</body>
</html>

的script.js

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="script.js"></script>
</head>
<body>
    <p>Waiting...</p>
</body>
</html>

content.htm

'use strict';

var getPage = function() {
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange = function() {
        if( (this.readyState == 4) && (this.status == 200) ) {
            writePage( this, "" + this.responseText );
        }
    };

    xmlhttp.open("GET", "content.htm", true);
    xmlhttp.send();
};

var writePage = function( xmlhttp, pageContent ) {
    var tempDocument = document;

    document.open( "text/html" );
    document.write( pageContent );
    document.close();
};

getPage();

<!DOCTYPE html> <html> <head> </head> <body> <h1>This is my written content.</h1> </body> </html> 函数中,此序列不起作用(writePage调用未返回):

document.open

但是,使用这样的临时引用:

document.open( "text/html" );
document.write( pageContent );
document.close();

工作正常。

0 个答案:

没有答案