2009-11-03 18 views
5

私はこの問題に関してインターネットを研究している月を過ごしたことがありますが、これに対する答えをまだ見つけていません。私のコードは以下を実行します(すべてのJavascript)。Document.Domain madness

のは、私は=「mydomain.com」document.domainを設定し、ヘッド部でmydomain.com

  1. 非常にまず最初にtest.htmlというのがあるとしましょう。

  2. その後、動的にDOM

  3. subdomain.mydomain.com/test2.htmlに "subdomain.mydomain.com/test2.html"

  4. 追加はiframeにIFRAME、設定SRC作成します。非常にheadセクションの最初のもの:document.domain = 'mydomain.com';

  5. test2.htmlはwindow.parent

すべてのブラウザで動作を経由して親と通信しようとするon_dom_readyイベントがあります。 IE6でも!唯一の問題は、IEでページを更新すると、アクセス拒否エラーが発生します。

このエラーを取り除く唯一の方法は、window.parentを呼び出す前に12秒待つことです。 5秒も助けなくても、私は12秒も待たなければなりません。それは私には意味がありません。

誰でもこれについて何か経験がありますか?

+0

IE7とIE8、またはIE6でこの問題がありますか? –

+0

IE 7とIE6の両方がIE8でテストしなかった – Gotys

+0

リフレッシュすると、F5を押すか、URL領域をクリックしてEnterキーを押しますか?これらは、リロードの2つの異なる「スタイル」をトリガーします.1つはキャッシュ100%に、もう1つは最後に変更された時間をサーバーでチェックします。 F5でリフレッシュするだけでエラーが表示される場合は、カーソルをURLウィンドウに置き、Enterキーを押してリフレッシュしてみてください。 – jvenema

答えて

2

親フレームのonloadイベントがまだトリガされていないため、DOMが完全に構築されていないためです。ここではそれが爆破せずに、存在するまでの間隔でのdivをスキャンしますその場しのぎだ:

var minmax_SCANDELAY= 500; 
var minmax_scanner; 

function minmax_scan() { 
    if (!window.parent.document.getElementById('content')) return; 
    window.clearInterval(minmax_scanner); 

    //replace following function call with your own. 
    doYourMagicHere(); 
} 

minmax_scan(); 
minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY); 
+0

ありがとう! これは有用な情報の一種です。間隔はタイムアウトの代わりに良いアイデアです。私はwindow.parent条件をtry/catchステートメントにラップしなければなりませんでした。しかし、親となるフレームでwindow.parentが利用できるようになるまでには、実際には最大10秒かかります。私はon_dom_readyイベントをon_loadsに変更しただけで、助けにはならなかった。 私はもう一度ストレスを加えたいと思います。これはページの最初の読み込みには当てはまりません。何か案が? – Gotys

0

ひそかの答えは私をたくさん助けました!彼は事実onloadイベントが本当に問題であるということで100%正しい。上記の機能は、文書のHEADセクションを変更

lazy_load: function(url,on_finish_function) 
{ 
    var head = document.getElementsByTagName("head")[0]; 
    var script = document.createElement("script"); 
    script.src = url; 
    var done = false; 

    var This = this; 
    // Attach handlers for all browsers 
    script.onload = script.onreadystatechange = function() 
    { 
     if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) 
     { 
      done = true; 
      on_finish_function.call(This,null); 
      head.removeChild(script); 
     } 
    }; 
    head.appendChild(script); 
}, 

:子のiframeを作成する前に、私は技術以下でいくつかのスクリプト遅延ロードだと、私は自分のコードの中に深く見てきたと私が見つかりました。 このlazy_load関数から子iframeがon_finishで生成されます。

私の推測では、IEのブラウザは実際にこれを怖がって、このような文書を変更したことによるショックから回復するのに12秒かかります:)この問題について私は何ができますか?なぜIEはlazy_load DOM操作から回復するのに時間がかかりますか?

+0

head.removeChild(script);私のonloadイベントの中で問題を引き起こしていました。 問題が解決しました。 – Gotys

関連する問題