1. ホーム
  2. javascript

[解決済み] document.domain = document.domainってどうやるの?

2023-02-08 04:45:25

質問

のクライアント側JSコンポーネントは 軌道に乗る (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) と入力すると、すべてが一致し、クロスポート/サブドメインフレーム通信が機能します。