2009-09-26 11 views
73

Orbitedのクライアント側のJSコンポーネント(彗星サーバー)は、サーバはJS自体に別のドメインまたはポート上で実行されている場合、他のJSがロードされる前に、あなたはdocument.domain = document.domainとは何ですか?

document.domain = document.domain; 

を実行しなければならないことを要求します。 (documentationを参照してください)

これはどうしますか?それはNOOPのように見えます! (私は確認して、それは実際に必要です)

答えて

175

私は実際にこのコードを書いています。

クロスサブドメイン/ポートコメットを実行しようとするとき、iframeは親フレームと同じdocument.domain値を持つ必要があります。残念ながら、ブラウザは元のドメイン名とポートを元のdocument.domain値のために内部的に保存します。しかし、javascriptのgetterとsetterはポートについて何も知らない。問題はこれです:上部フレームdocument.domain('example.com', 80)で、下部フレームが('comet.example.com', 80)なら、どのように下部フレームを('example.com', 80)にもできますか?

ホスト名部分を変更すると必ずポートがnullに設定されるため、最下位のフレームには('example.com', null)が最適です。そのため、トップフレームもその値に設定する必要があり、document.domain=document.domainを設定するだけです。ブラウザの内部表現が('example.com', 80)から('example.com', null)に変更され、すべてが一致し、クロスポート/サブドメインのフレーム通信が機能します。明示的に、彼らは同じ値を返す場合でも... を設定するときに明示的 と (b)はdocument.domainを設定しない場合は

+80

+1最初の文のために:) –

+0

この解決策は残念ながら私のために働いていません(http://stackoverflow.com/questions/7796767/is-it-possible-to-alter-one-frame-from-another-詳細はjavascriptを使用してください)。 'document.domain = document.domain'をすべてのフレームに追加しても、Chromeの動作は変更されません。何か案は? –

+0

また、私は私のjsの遅延を設定する場合、私は少なくとも、両方のフレームのための有効な見ているURLを取得することを考え出した。しかし、一方のフレームは他方のフレームにアクセスすることはできません。 –

9

私はこのサイトで次の情報を見つけました:devguru

このプロパティセットまたは文書の発信元 からサーバーの ドメイン名を返します。具体的には、ここでの引用です。これにより、 の文書を取得したサーバのドメイン名に がデフォルト設定されますが、 はこの名前の接尾辞(末尾には )に変更できます。これにより、 が同じドメインサフィックスを共有している場合、 が異なるサーバーから配信されたドキュメント間で のスクリプトプロパティを共有できるようになります。

同じドメイン(サブドメインが異なる場合でも)に対してクロスサイトスクリプティングができるようです。

私はdocument.domainに触れないと、jsエンジンは同じドメインの他のjavascriptだけを許可すると思います。このプロパティを使用すると、軌道に乗ったドキュメントの状態と同じように、のサブドメインに展開することができます。

+6

'document.domainを= document.domain'は* * NOOPない理由を説明していません。 –

+1

ちょうど野生の推測ですが、私が言ったように、プロパティが値に設定されている場合にのみトリガされると思います。 –

29

ブラウザは (a)はdocument.domainを区別します。

明示的に値を設定すると、(同じ親ドメインの下にある)別のサブドメインのスクリプトと "協力"する意思を示します。

親ページと外部スクリプトの両方が明示的にドキュメントを設定している場合。同一元のポリシーの制限をバイパスすることができ、各スクリプトは、他のすべての(制限された)オブジェクトおよび他のコンテキストのプロパティにアクセスすることができます。

+5

最初の文は、この問題について理解するために非常に重要な詳細です。ありがとう! –

+0

大歓迎です!うれしいことはうれしいです。 :) – cweekly

6

document.domainは、明示的に設定されていない場合、実際のURLからデフォルトを引き出します。ブラウザは、document.domainがURLからのデフォルトとして指定されている場合、または明示的に設定されている場合に記録します。どちらも同じドメインのデフォルトである必要があります。あるいは、両方が明示的に同じドメインに設定されている必要があります。 1つがデフォルトで、1つが明示的に設定されていれば、両方とも一致すれば、2つのページは互いに話すことができなくなります。

参照:https://developer.mozilla.org/en-US/docs/DOM/document.domain

関連する問題