アップロード サーバーとアップローダを展開している Web サイトを含むすべての Web サイトを所有している場合は、簡単な DNS トリックをいくつか使用することで解決できる可能性があります。
- たとえば、アップロード サーバーのドメインが
upload.example.com
.
- あなたのサーバーが
www.example.com
.
上記の場合、document.domain プロパティを設定することでクロス サイト スクリプティングを有効にできます。
document.domain = "example.com";
これにより、www.example.com が upload.example.com iframe と通信できるようになります。
サブドメイン間で通信する機能は、Web サイトを所有していると仮定して、他の Web サーバー間の通信に役立ちます。
ドメインが違う場合はどうする?
次のように仮定します。
upload.example.com
はアップロード サーバーです。
www.domain.com
アップローダ iframe を含む親ドキュメントである Web サイトです。
繰り返しになりますが、これらのドメイン名の両方を所有しているか、少なくとも設定にアクセスできると想定しています。サブドメインでのクロスサイト スクリプティングの有効化に関する上記の知識を使用して、いくつかの DNS トリックを使用できます。
- DNS マネージャーで、 の CNAME を作成し、
upload.domain.com
そのサブドメインが と同じサーバーを指すようにしますupload.example.com
。完了すると、両方upload.example.com
とupload.domain.com
両方が同じサーバーと PHP アプリケーションを指します。
- に
www.domain.com
埋め込んupload.domain.com
で設定document.domain="domain.com";
- で
www.example.com
、埋め込みupload.example.com
&設定document.domain="example.com";
どちらの場合も、Web サイトのドメイン名がアップローダーのドメイン名と一致し、document.domain プロパティがドメインと一致することがわかります。
を呼び出して$('iframe', top.document).css('border', '1px green solid');
も、権限エラーは発生しません。
要約すると、アップローダの iframe を埋め込む Web サイトが何であれ、Web サイトのドメインに一致するそのアップローダの CNAME エイリアスを作成したこと、および document.domain プロパティがアップローダと Web サイトの両方で設定されていることを確認してください。 .
iframe でプロパティを使用してdocument.referrer
、親ドキュメントのコンテキストを動的に決定し、ドメイン プロパティを何に設定するかを決定できます。
// uploader file code
// array split by period to get domain ["http://uploader", "example", "com/iframe/uploadFile", "php"]
var domainSplit = document.referrer.split(".");
// the 2nd place in the array is the domain. You may need to improve this for deeper subdomains
document.domain = domainSplit[1];
注: Apache と PHP を使用していると仮定しています。upload.XYZ.com
その場合、すべてのドメインに対して ServerAlias エントリを作成できます。別のサーバーを使用している場合、ほとんどのサーバーには ServerAlias を設定する方法があります。