私は次のJavaScriptを持っています:
var iframe = document.createElement('iframe');
iframe.src='javascript:""';
document.body.appendChild(iframe);
var doc = iframe.contentDocument;
doc.open();
doc.write('<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />');
doc.write('<link type="text/css" rel="stylesheet" href="http://cdn.sstatic.net/stackoverflow/all.css?v=db16ef7a3fac" />');
doc.write('<script type="text/javascript">;</' + 'script>');
doc.write('<title>test</title></head><body><br>test</body></html>');
doc.close();
console.log(doc.body);
setTimeout(function() {
console.log(doc.body);
}, 1000);
jsfiddle、最初にコンソールを開きます
Firefox で実行すると、<body>
適切に 2 回ダンプされます。
Chrome で実行すると、最初null
に 、次にが表示されます<body>
。ただし、もう一度実行すると、Chromeも<body>
2回表示されます。
doc.childNodes
when body
isを見るnull
と、chrome が の直後で HTML 文字列の処理を何らかの形で停止している</script>
ため、本文が設定されていないことがわかります。
この問題は、<link>
タグが存在する場合にのみ発生します。この行をコメントアウトすると、正常に動作します。
クロムで問題を再現できますか?Chrome に HTML 文字列を同期的に処理させる方法はありますか?
編集:フィドルを修正したところ、css行がコメントアウトされていました。