Flashムービーは、国際名(特にロシア連邦)のサイトでホストされている場合、サーバー上のリソースにアクセスできません。 Windows用のFirefoxブラウザーで表示されます。
特にこのブラウザとこのプラットフォームの普及を考えると、あまりいいバグではありません...フォーラムをざっと見ても、期待した結果が得られなかったので、研究を始めなければなりませんでした。 だから、詳細...
テスト
はじめに-テストフラッシュドライブ。 数行のコードで調査に十分です。
var xml = new XML; xml.onLoad = function() { _root.txt.text = this.toString(); }; xml.load(typeof(_root.link) === "undefined" ? "test.xml" : _root.link);
もちろん、最初のフレームのtxtという名前のテキストボックスを忘れる必要はありません。 アルゴリズムは単純です。ファイル「test.xml」をロードし、その内容を表示します。 オプション«リンク»場合は、XMLは、指定されたアドレスからロードされます。 対応する「test.xml」を最も簡単にします。
<?xml version="1.0" encoding="UTF-8"?> <test>Test</test>
「test.swf」および「test.xml」ファイルがサーバーにアップロードされ、テストが開始されます。 テストには、同義語である2つのドメイン、1つのRUと1つのRFが使用されました。 期待される結果-フラッシュドライブは、任意のドメインのXMLファイルの内容を表示する必要があります。 テストが完了しました:
- Opera 11(Windows、Linux)
- Google Chrome 9(Windows、Linux)
- Internet Explorer 8
- Internet Explorer 6(punycodeアドレス)
リサーチ
何が悪いの? Firebugを介したサーバーからのリソースの読み込みをテストしてみましょう。
RUドメインではすべて問題ありません。
しかし、RFドメインには何か問題があります。
実際、問題は目に見えます。Firefoxと組み合わせたFlashプラグインは、ドメイン名をpunycodeでエンコードせずにアドレスを要求するため、問題が発生します。
さて、別の方法で試してみましょう。 RUドメインからデータをロードしてみましょう。 我々は機会のために提供したパラメータ«リンク»のアドレスを追加します。
私たちがあるため、クロスサイトリクエストに問題の動作しなかったことは明らかです。 しかし、私たちは順番に行動することを決めたので、一貫性があります証明に必要なもの:
ドキュメントを準備して、サイトのルートに「crossdomain.xml」ファイルを作成します。 このファイルは、RUドメイン(XMLファイルが配置されているドメイン)から要求され、どのフラッシュクリップがデータをロード、ダウンロードできるか(より正確には、これらのビデオが公開されるドメイン)を示す必要があります。
唯一の質問は、どのドメインがXMLファイルへのリクエストを許可するかです。 結局のところ、見てきたように、キリル語のドメイン名には特定の問題があります...
我々は一貫してすべての可能なRFドメイン名をテストしました:
- キリル文字(.rf)
- Punycode(.xn-p1ai)
- URLエンコード小文字(%D1%で80%のD1%84)
- URLエンコード大文字(%D1は%80%D1の84%)
<?xml version="1.0" encoding="UTF-8"?> <cross-domain-policy> <allow-access-from domain="."/> <allow-access-from domain="*.."/> <allow-access-from domain="xn--80asmaqi.xn--p1ai"/> <allow-access-from domain="*.xn--80asmaqi.xn--p1ai"/> <allow-access-from domain="%D1%81%D0%B0%D0%B9%D1%82%D0%BD%D0%BD.%D1%80%D1%84"/> <allow-access-from domain="*.%D1%81%D0%B0%D0%B9%D1%82%D0%BD%D0%BD.%D1%80%D1%84"/> <allow-access-from domain="%d1%81%d0%b0%d0%b9%d1%82%d0%bd%d0%bd.%d1%80%d1%84"/> <allow-access-from domain="*.%d1%81%d0%b0%d0%b9%d1%82%d0%bd%d0%bd.%d1%80%d1%84"/> </cross-domain-policy>
" <?xml version="1.0" encoding="UTF-8"?> <cross-domain-policy> <allow-access-from domain="."/> <allow-access-from domain="*.."/> <allow-access-from domain="xn--80asmaqi.xn--p1ai"/> <allow-access-from domain="*.xn--80asmaqi.xn--p1ai"/> <allow-access-from domain="%D1%81%D0%B0%D0%B9%D1%82%D0%BD%D0%BD.%D1%80%D1%84"/> <allow-access-from domain="*.%D1%81%D0%B0%D0%B9%D1%82%D0%BD%D0%BD.%D1%80%D1%84"/> <allow-access-from domain="%d1%81%d0%b0%d0%b9%d1%82%d0%bd%d0%bd.%d1%80%d1%84"/> <allow-access-from domain="*.%d1%81%d0%b0%d0%b9%d1%82%d0%bd%d0%bd.%d1%80%d1%84"/> </cross-domain-policy>
このように見えた:
つまり、「crossdomain.xml」がロードされていますが、FlashプレーヤーはXMLデータをこのサイトからダウンロードできないと判断します。
解決策
最後のオプションは残りました-ドメインとして「*」を指定します。 したがって、「crossdomain.xml」は次の形式を取得しました。
<?xml version="1.0" encoding="UTF-8"?> <cross-domain-policy> <allow-access-from domain="*"/> </cross-domain-policy>
そして-見よ!
道徳
問題に対する解決策があります。 いじめはありません。 もちろん、このソリューションは理想的ではありません。「crossdomain.xml」を介したデータへのアクセスは、すべてのサイトですぐに開くからです。 ただし、「crossdomain.xml」に注意を払うことなく、必要な人が別の方法でデータにアクセスできるため、これは必ずしも問題ではありません。
パラメーター(flashvars)でホスト名を指定するかどうか、またはフラッシュムービーのソースに含める必要があるかどうかについては、質問は未解決のままです。 確かに、多くの開発者は、保護の目的でフラッシュドライブ内のサイトの名前を「ハードコード化」することを好み、ほとんどの場合、これらのアドレスをパラメーターに入れることを好みます。 完全にプロジェクトやタスクに応じて、これらの真実を認め、およびその他。 そして、私は主張していなかったこのテーマに好みます。
材料: