私は Django プロジェクトに取り組んでおり、グッド プラクティスの一環として、静的コンテンツとメディアを Cookie のないドメインから提供しています。もちろん、これを行い、Google アナリティクスなどを引き続き使用するために、www.domain.tld からすべてのドキュメントを提供し、メディアは media.domain.tld から取得し、静的は static.domain.tld から取得します。
これは当初、私が選択した wywiwyg エディターである TinyMCE で問題を引き起こしましたが、次の行を編集tiny_mce.js
して含めることで簡単に解決できました。tiny_mce_popup.js
document.domain=window.location.hostname.split('.').splice(-2).join('.');
頂点で。これは基本的document.domain
に、メインの編集ウィンドウと TinyMCE ポップアップを domain.tld に設定します。これは、ソース元のサブドメインがどれだけ深くても関係ありません。うまく機能します(そして移植可能です)。(TinyMCE は、ブラウザーを制御する管理にのみ使用されるため、Array.splice() がクライアント ブラウザーで使用できない可能性があることは気にしません)。
とにかく脱線します。
たとえば、Django Admin ポップアップを使用して新しい M2M アイテムをその場で作成しようとするまでは、すべて問題ありませんでした。ポップアップは正常に表示されますが、ポップアップ ウィンドウのドキュメント ドメインが www.domain.tld に設定され、メイン編集ウィンドウの document.domain がdomain.tld
(上記のように)であるため、ジョブを適切に終了できません。 )。
簡単だと思いました。管理者の base.html ファイルの本文に同じ JS スニペットを追加するだけです。立ち入り禁止。ポップアップの document.domain はdomain.tld
、含まれているスニペットに従って JS コンソールでテストすると実際に設定されますが、新しいオブジェクトを保存しようとするとすぐにリセットされますwww.domain'tld
(また、テスト済みで、JS コンソールでの送信後) 、そしてもちろん、ウィンドウ間の通信は次のように失敗します。
Uncaught TypeError: Property 'dismissAddAnotherPopup' of object \
[object Window] is not a function`
ポップアップ ウィンドウで次の操作を行います。
Unsafe JavaScript attempt to access frame with URL \
http://www.domain.tld/admin/project/object/16/ from frame with URL \
http://www.domain.tld/admin/project/object/add/?_popup=1. The frame being \
accessed set 'document.domain' to 'domain.tld', but the frame requesting access \
did not. Both must set 'document.domain' to the same value to allow access.
2 つのウィンドウを確認document.domain
すると、次の事実が明らかになります。
メイン ウィンドウ:domain.tld
ポップアップ ウィンドウ: www.domain.tld
(送信時に変更されていることに注意してください)
それで、すべての専門家に質問します。結果をメイン ウィンドウに戻す直前に、ポップアップ フレームの document.domain をリセットしている Django JS コードはありますか? または、リセットは、メイン ウィンドウのウィンドウ オブジェクトを使用して通信を行うことの副作用ですか? 以前の場合、これがどこになるか教えていただけますか? どのファイルにあるのかわかりません。後者の場合、cookieless ドメイン + TinyMCE + Django Admin ポップアップを使用するための解決策は何ですか?
この問題を検討していただき、誠にありがとうございます。