在iframe动态加载内容时,序列select col_name from test
where not regexp_like(col_name, '.*[^a-zA-Z0-9 .{}\[\]].*')
,document.open
和document.write
在IE 9,10和11中失败,但在其他浏览器中成功。但是,如果我将document.close
分配给临时变量,然后执行document
,open
,write
,则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();
工作正常。