2012-03-15 11 views
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title></title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 

<script> 
var G = function (id) {return document.getElementById(id); } 
var C = function (tag) {return document.createElement(tag); } 

window.onload = function() 
{ 
var f = C('frame'); 
f.name = 'my'; 
f.id = 'my'; 
f.src = 'about:blank'; 
G('content').appendChild(f); 

alert('test'); 

window.frames['my'].document.write('Loading...'); 
} 
</script> 

<frameset id="content" rows="100%,*" cols="*" frameborder="no" border="0" framespacing="0"> 
</frameset> 
</html> 

alert( 'test'); //この行を削除すると、Operaのロードは成功しません。 なぜですか? IE FirefoxのクロームSafariの問題ありません...OperaフレームBUG?

答えて

3

イェーイ、別の程度:Operaは皆とは異なるこのような単純なことをしたときに、とにかくhttp://hsivonen.iki.fi/about-blank/

:空白のロードタイミングの問題が...それはこの権利を取得することは本当に難しいですそうでなければ、それは定義上、Operaのバグです。私は "CORE-45144 - window.framesコレクションは、FRAMEがDOM(appendChildとfriends)を介してFRAMESETに追加されたときに直ちに更新されない"ので報告しました。この問題を解決するための継続的なメンテナンスプロジェクトがありますが、結果はOpera 12には向いていませんが、次の重要なアップデートとなる可能性があります。

回避策が必要な場合は、わずかなタイムアウト値を指定してsetTimeout()を使用して、新しいフレームに書き込むコードをわずかに遅延させてください。

私の注意を喚起してくれてありがとう:-)