データのロード



SWF ファイルはサーバーから ActionScript 内にデータをロードでき、ActionScript からサーバーにデータを送信できます。 データのロードはメディアのロードとは異なる種類の操作です。なぜなら、ロードされた情報は、メディアとして表示されず、ActionScript 内で直接表示されるからです。 一般に、SWF ファイルは、それ自体のドメインからデータをロードできます。 ただし、別のドメインからのデータをロードする場合は、通常はポリシーファイルが必要です。Web サイトのコントロール(ポリシーファイル)を参照してください。

URLLoader と URLStream の使用

データは、XML ファイルまたはテキストファイルとしてロードできます。 URLLoader クラスと URLStream クラスの load() メソッドは、URL ポリシーファイルの許可により制御されます。

load() メソッドを使用して、このメソッドを呼び出している SWF ファイルのドメイン以外のドメインからコンテンツをロードする場合、Flash Player はロードされるアセットのサーバ上に URL ポリシーファイルがあるかどうかをチェックします。ポリシーファイルが存在し、ロードする側の SWF ファイルのドメインへのアクセスが許可されている場合は、データをロードできます。

ソケットへの接続

デフォルトでは、Flash Player はポート 843 から提供されるソケットポリシーファイルを検索します。 URL ポリシーファイルと同様に、このファイルはマスターポリシーファイルと呼ばれます。

ポリシーファイルが最初に Flash Player 6 に導入されたとき、ソケットポリシーファイルのサポートはありませんでした。 ソケットサーバへの接続は、ソケットサーバと同じホストのポート 80 上にある HTTP サーバのデフォルトの場所に置かれているポリシーファイルによって承認されていました。Flash Player 9 では、この機能が引き続きサポートされていますが、Flash Player 10 ではサポートされていません。Flash Player 10 では、ソケットポリシーファイルだけがソケット接続を承認できます。

URL ポリシーファイルと同様に、ソケットポリシーファイルは、ポリシーファイルを提供するポートを指定するメタポリシーステートメントをサポートします。しかし、ソケットポリシーファイルのデフォルトメタポリシーは、「マスターのみ」ではなく「すべて」です。したがって、マスターポリシーファイルで高度な制限が設定されている場合を除き、Flash Player では、ホスト上の任意のソケットがソケットポリシーファイルを提供できるものと見なされます。

接続先のソケットが SWF ファイルと同じドメインにある場合でも、ソケットへのアクセスおよび XML ソケット接続は、デフォルトで無効です。次の場所のいずれかからソケットポリシーファイルを提供して、ソケットレベルのアクセスを許可できます。

  • ポート 843(マスターポリシーファイルの場所)

  • メインソケット接続と同じポート

  • メインソケット接続以外のポート

デフォルトでは、Flash Player はポート 843 およびメインソケット接続と同じポートでソケットポリシーファイルを検索します。別のポートからソケットポリシーファイルを提供する場合、SWF ファイルは、Security.loadPolicyFile() を呼び出す必要があります。

ソケットポリシーファイルのシンタックスは URL ポリシーファイルと同じですが、アクセスを許可するポートも指定する必要がある点が異なります。ソケットポリシーファイルが 1024 未満のポート番号から提供される場合、任意のポートへのアクセスが許可されます。ポリシーファイルがポート 1024 以上のポートから提供される場合、1024 以上のポートへのアクセスのみが許可されます。許可するポートは、<allow-access-from> タグの to-ports 属性で指定します。指定できる値は、単一のポート番号、ポート範囲、およびワイルドカードです。

次に、ソケットポリシーファイルの例を示します。

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<!-- Policy file for xmlsocket://socks.mysite.com --> 
<cross-domain-policy>  
    <allow-access-from domain="*" to-ports="507" />  
    <allow-access-from domain="*.example.com" to-ports="507,516" />  
    <allow-access-from domain="*.example.org" to-ports="516-523" />  
    <allow-access-from domain="adobe.com" to-ports="507,516-523" />  
    <allow-access-from domain="192.0.34.166" to-ports="*" />  
</cross-domain-policy> 

ポート 843 またはメインソケット接続と同じポートからソケットポリシーファイルを取得するには、Socket.connect() または XMLSocket.connect() メソッドを呼び出します。Flash Player は、最初にポート 843 上のマスターポリシーファイルをチェックします。マスターポリシーファイルが見つかった場合、Flash Player は、ターゲットポート上のソケットポリシーファイルを禁止するメタポリシーステートメントがファイルに含まれているかどうかをチェックします。アクセスが禁止されていない場合、マスターポリシーファイル内の適切な allow-access-from ステートメントが最初に検索されます。適切なステートメントが見つからない場合、メインソケット接続と同じポート上でソケットポリシーファイルが検索されます。

別の場所からソケットポリシーファイルを取得するには、次に示すように、最初に特別な「xmlsocket」シンタックスで Security.loadPolicyFile() メソッドを呼び出します。

Security.loadPolicyFile("xmlsocket://server.com:2525"); 

Socket.connect() または XMLSocket.connect() メソッドを呼び出す前に Security.loadPolicyFile() メソッドを呼び出します。その場合、Flash Player は、ユーザーのメイン接続を許可するかどうかを決める前に、ユーザーのポリシーファイル要求が満たされるのを待ちます。 しかし、ターゲットの場所でポリシーファイルを提供できないことがマスターポリシーファイルで指定されている場合は、その場所にポリシーファイルが存在していても loadPolicyFile() への呼び出しは無効です。

ソケットサーバを実装し、ソケットポリシーファイルを提供する必要がある場合は、ポリシーファイルを提供するのに、メイン接続を受け入れるのと同じポートを使用するか、別のポートを使用するかを決めてください。いずれの場合も、サーバは、クライアントからの最初の送信を待ってから応答を送信する必要があります。

Flash Player は、ポリシーファイルを要求する場合、接続が確立されると同時に、必ず次のストリングを送信します。

<policy-file-request/>

サーバーはこのストリングを受信すると、ポリシーファイルを送信できます。 Flash Player からの要求は、常に null バイトによって終了し、サーバからの応答も null バイトで終了する必要があります。

同じ接続をポリシーファイル要求とメイン接続の両方に再使用しないでください。ポリシーファイルの送信後は、接続を閉じてください。そのようにしなかった場合、Flash Player はポリシーファイル接続を閉じてから、再接続してメイン接続を設定します。

データの送信

データ送信が行われるのは、SWF ファイルの ActionScript コードによりサーバーまたはリソースにデータが送信されるときです。 データの送信は、ネットワークドメイン SWF ファイルで常に実行できます。 ローカル SWF ファイルは、その SWF ファイルが local-trusted サンドボックスまたは local-with-networking サンドボックスに入っている場合にのみ、ネットワークアドレスにデータを送信できます。 詳しくは、ローカルサンドボックスを参照してください。

flash.net.sendToURL() 関数を使用すると、URL にデータを送信できます。それ以外のメソッドも、URL に要求を送信します。 これらのメソッドには、Loader.load()Sound.load() などのロードメソッドと URLLoader.load()URLStream.load() などのデータロードメソッドがあります。

ファイルのアップロードとダウンロード

FileReference.upload() メソッドは、ユーザによって選択されたファイルのリモートサーバへのアップロードを開始します。FileReference.upload() メソッドを呼び出す前に、FileReference.browse() メソッドまたは FileReferenceList.browse() メソッドを呼び出す必要があります。

FileReference.browse() または FileReferenceList.browse() メソッドを開始する ActionScript は、マウスイベントまたはキーボードイベントへの応答としてのみ呼び出すことができます。別の状況で呼び出された場合、Flash Player は例外をスローします。

FileReference.download() メソッドを呼び出すと、ユーザがリモートサーバからファイルをダウンロードできるダイアログボックスが開きます。

注意: サーバーでユーザー認証が必要な場合、ブラウザ内で実行される、つまり、ブラウザプラグインまたは ActiveX コントロールを使用する SWF ファイルでのみ、認証用のユーザー名とパスワードをユーザーが入力できるダイアログボックスを表示できます。ただし、それはダウンロードの場合のみです。Flash Player では、ユーザー認証が必要なサーバーへのアップロードはできません。

呼び出しを行う SWF ファイルが local-with-filesystem サンドボックス内にある場合、アップロードとダウンロードは許可されません。

デフォルトでは、SWF ファイルは、それ自体のサーバー以外のサーバーとの間でアップロードまたはダウンロードを行うことはできません。 SWF ファイルは、別のサーバへのアップロードまたはダウンロードが可能ですが、そのサーバに、呼び出し側 SWF ファイルのドメインに許可を付与するポリシーファイルが格納されている必要があります。