1

私は次の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.childNodeswhen bodyisを見るnullと、chrome が の直後で HTML 文字列の処理を何らかの形で停止している</script>ため、本文が設定されていないことがわかります。

この問題は、<link>タグが存在する場合にのみ発生します。この行をコメントアウトすると、正常に動作します。

クロムで問題を再現できますか?Chrome に HTML 文字列を同期的に処理させる方法はありますか?

編集:フィドルを修正したところ、css行がコメントアウトされていました。

4

1 に答える 1