2011-07-07 27 views
1
function fload(){ 
    f = document.createElement('iframe'); 
    f.setAttribute('id','iframe'); 
    f.setAttribute('src','http://www.wtsp.com/news/article/199268/8/man-falls-behind-on-payments-mortgage-company-has-home-trashed'); 
    f.setAttribute('frameborder','0'); 
    document.getElementById('content').appendChild(f); 
} 

他のすべてがロードされたら、iframeを読み込もうとしています。上記はコードです。 IE9では、コンソールに「SCRIPT65535:メソッドまたはプロパティアクセスへの予期しない呼び出し」が表示されます。 appendChild()でその行を指し示します。"メソッドまたはプロパティへのアクセスが予期せず呼び出されました。 IEでのappendChild()

iframeを非同期に読み込むことはできますか?

+1

'var'でその関数に' f'をスコープする必要があります。また、あなたは、このコードが実行された時点で 'content' idが存在する要素があるのでしょうか? – alex

+1

IE9で、このjsfiddle:http://jsfiddle.net/jfriend00/GVNSf/に示すように動作しています。私はdocument.getElementById( 'content')があなたの実際のページで働いていてはならないということを意味します。いつfloadを呼びますか?ページが読み込まれた後ですか?あまりに早く呼び出すと、コンテンツオブジェクトがまだ存在しない可能性があります。 – jfriend00

+0

フレームは非同期でそのままロードされます。 – jfriend00

答えて

2

コメント者が言ったように、おそらくidがの要素の要素はまだ存在しません。また、あなただけの直接DOMプロパティを設定し、のsetAttributeを使用する必要はありません。

function fload(){ 
    var f; 
    var el = document.getElementById('content'); 

    if (el && el.appendChild) { 
    f = document.createElement('iframe'); 
    f.id = 'iframe'; 
    f.src = 'http://...'; 
    f.frameborder = '0'; 
    el.appendChild(f); 
    } 
} 

あなたは要素が存在する自信があるまで、あなたが上記の関数を呼び出すべきではありませんが、loadイベントまたは類似の後に言います。

関連する問題