Orbited(Cometサーバー)のクライアント側のJSコンポーネントでは、サーバーがJS自体とは異なるドメインまたはポートで実行されている場合は、実行する必要があります。
document.domain = document.domain;
他のJSがロードされる前。(ドキュメントを参照してください。)
これは何をしますか?NOOPのようです!(確認しましたが、実際には必要です。)
回答:
私は実際にこのコードを書きました。
サブドメイン/ポートのコメットを実行する場合、iframeのdocument.domain
値は親フレームと同じである必要があります。残念ながら、ブラウザーはドメイン名とポートを元のdocument.domain
値のために内部的に保存します。しかし、JavaScriptのゲッターとセッターはポートについて何も知りません。だから問題はこれです:上のフレーム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)
と、その後すべてがアップ一致すると、クロスポート/サブドメインフレーム通信工事。
このサイトで次の情報を見つけました:devguru。より具体的には、ここに引用があります:
このプロパティは、ドキュメントが作成されたサーバーのドメイン名を設定または返します。デフォルトでは、ドキュメントが取得されたサーバーのドメイン名になりますが、この名前のサフィックス(およびサフィックスのみ)に変更できます。これにより、異なるサーバーから配信されたドキュメント間で、同じドメインサフィックスを共有する場合に、スクリプトプロパティの共有、セキュリティの許可が可能になります。
(サブドメインが異なる場合でも)同じドメインのクロスサイトスクリプティングを許可しているように思えます。
document.domainに触れない場合、jsエンジンは同じドメインの他のJavaScriptのみを許可すると思います。このプロパティを使用すると、オービットされたドキュメントの状態などの他のサブドメインにデプロイできます。
document.domain = document.domain
がNOOPではないかを説明するものではありません。
document.domain
明示的に設定されていない場合は、実際のURLからデフォルトを引っ張ります。ブラウザはdocument.domain
、URLがデフォルトであるか、明示的に設定されているかを記録します。これが機能するには、両方が同じドメインのデフォルトであるか、両方が明示的に同じドメインに設定されている必要があります。1つがデフォルトで、1つが明示的に設定され、両方が読み取られた場合に一致する場合でも、2つのページが互いに対話することは禁止されます。
参照:https : //developer.mozilla.org/en-US/docs/DOM/document.domain