SWFをHTMLに埋め込む場合、ブラウザからまたはネットワーク上でコンテンツにアクセスするためにSWFファイルが持つアクセス許可をFlash Playerに通知するフラグを設定できます。これらのフラグは、サイトでサードパーティ開発者の信頼性のないSWFファイルをホストする場合に役立ちます。
以下に説明する方法以外の追加情報については、「How to restrict SWF content from HTML*」のブログ投稿を参照してください。
HTMLスクリプトへのアクセス制御について詳しくは、Adobe LiveDocsの「ホストWebページのスクリプトへのアクセス制御」を参照してください。
allowScriptAccess設定は、Flash Player 6.0.40.0以降で使用できるようになりました。この設定により、親SWFファイルおよび親SWFファイルによってロードされたSWFファイルが、FSCommandやExternalInterfaceなどのコマンドを使用するか、「javascript://{code}」ステートメントをgetURL(ActionScript 2.0の場合)およびnavigateToURL(ActionScript 3.0の場合)に送信することによって、ブラウザに対して外部スクリプト呼び出しを行うことができるかどうかが決まります。
SWFファイルへのアクセスを許可する場合、基本的にHTMLページ全体への読み取りアクセスと書き込みアクセスの両方を許可することになるという点に注意してください。
allowScriptAccessでは、次の3種類の設定が可能です。
allowNetworkingタグは、ブラウザ内でのスクリプトアクセスに影響する場合があり、allowScriptAccessタグで使用されている設定より優先されることに注意することも重要です。
次のコード例の強調表示されているセクションを確認してください。
<object id='MyMovie.swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='100%' width='100%'> <param name='allowScriptAccess' value='never'/> <param name='src' value=''MyMovie.swf'/> <embed name='MyMovie.swf' pluginspage='/go/getflashplayer' src='MyMovie.swf' height='100%' width='100%' allowScriptAccess='never'/> </object>
以下で説明する内容について詳しくは、Adobe LiveDocsの「ネットワークAPIの制限」を参照してください。
allowNetworking機能は、ブラウザまたはActionScriptのネットワーク呼び出しを通じて、SWFが外部ネットワーク呼び出しを行うことを防ぐためにFlash Player 9で追加されました。allowScriptAccessタグによって制御されるメソッドはクラス全体のActionScriptネットワークメソッドのサブセットなので、allowNetworking設定はallowScriptAccess設定よりも優先されることになります。
allowNetworkingでは、次の3種類の設定が可能です。
allowScriptAccessによって制御されます。これがデフォルト設定です。navigateToURL()、fscommand()およびExternalInterface.call()の各ActionScript 3.0コマンドを作成できなくなります。ActionScript 2.0の開発者の場合、getURL()、MovieClip.getURL()、fscommand()およびExternalInterface.call()が制限されます。この設定によりallowScriptAccess設定が無効になり、SWFとブラウザとの通信がブロックされます。すべてのネットワーク呼び出しは、SWF内で内部的に行う必要があります。ActionScript 3.0の場合、内部設定によってブロックされるネットワークメソッドだけでなく、sendToURL()、FileReference.download()、FileReference.upload()、Loader.load、LocalConnection.connect()、NetConnection.connect()、NetStream.play()、Security.loadPolicyFile()、SharedObject.getLocal()、SharedObject.getRemote()、Socket.connect、Sound.load()、URLLoader.load()、URLStream.load()、XMLSocket.connect()、System.security.loadPolicyFile()の各ネットワークメソッドもブロックされます。
ActionScript 2.0の場合、内部設定によってブロックされるネットワークメソッドだけでなく、XML.load()、XML.send()、XML.sendAndLoad()、LoadVars.load()、LoadVars.send()、LoadVars.sendAndLoad()、loadVariables()、loadVariablesNum()、MovieClip.loadVariables()、NetConnection.connect()、NetStream.play()、loadMovie()、loadMovieNum()、MovieClip.loadMovie()、MovieClipLoader.loadClip()、Sound.loadSound()、LocalConnection.connect()、LocalConnection.send()、SharedObject.getLocal()、SharedObject.getRemote()、FileReference.upload()、FileReference.download()、System.security.loadPolicyFile()、XMLSocket.connect()の各ネットワークメソッドもブロックされます。
また、TextFieldオブジェクトのhtmlTextプロパティの<img>タグ内で外部メディアを参照することはできません(SecurityError例外がスローされます)。(ActionScriptではなく)Flashオーサリングツールで追加されたインポート済み共有ライブラリのシンボルは、実行時にブロックされます。
次のコード例の強調表示されているセクションを確認してください。
<object id='MyMovie.swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='100%' width='100%'> <param name='allowNetworking' value='none'/> <param name='src' value=''MyMovie.swf'/> <embed name='MyMovie.swf' pluginspage='/go/getflashplayer' src='MyMovie.swf' height='100%' width='100%' allowNetworking='none'/> </object>
表1.に、allowNetworkingフラグとallowScriptAccessフラグの組み合わせの結果を示します。
表1.さまざまなセキュリティレベルのネットワーク設定とアクセス設定
| allow ScriptAccess |
allowNetworking | ||
|---|---|---|---|
all |
internal |
none |
|
always |
SWFは、ブラウザおよびネットワークと通信するためのフルアクセス権を持ちます。これが最も安全性の低い設定です。 |
|
|
sameDomain |
SWFとHTMLが同じドメインに含まれている場合、SWFはHTMLコンテナとやり取りできます。すべての内部ネットワークAPIを使用できます。 |
|
|
never |
SWFはブラウザの呼び出しを行うことはできませんが、ソケットやローダーなどの内部APIを使用してネットワーク呼び出しを行うことができます。 |
このSWFはブラウザと通信できません。SWFは、ソケットやローダーなどの内部APIを利用してネットワークと通信できます。 |
|
フルスクリーンモードでの動作について詳しくは、デベロッパーセンターの記事「Flash Player 9のフルスクリーンモードの説明」を参照してください。
Flash Playerに用意された機能を使用して、フルスクリーンモードの表示を制御できます。サードパーティのSWFファイルをホストするWebサイトでは、フルスクリーンモードに切り替え、サイトのコンテンツをオーバーレイすることをビデオに許可することは望ましくない場合があります。基本的に、フルスクリーン表示を使用すると、エンドユーザは実際にはサードパーティのSWFファイルとやり取りしているにもかかわらず、ホストしているWebサイトとやり取りしていると信じ込まされる可能性があります。デフォルトでは、allowFullScreenオプションはfalseに設定されています。
アドビでは、このシナリオを制限する他の制御を用意しました。ユーザは、マウスクリックまたはキー入力によってフルスクリーンモードを開始する必要があります。フルスクリーン表示を起動すると、SWFをフルスクリーンモードで表示することをエンドユーザに警告するオーバーレイダイアログボックスが表示されます。このダイアログボックスでは、フルスクリーンモードの終了方法も示されます。SWFがフルスクリーンモードで表示されている間、ユーザはテキスト入力フィールドにデータを入力することはできません。ユーザと管理者は、mms.cfgファイルでフルスクリーンモードを禁止することもできます。
次のコード例の強調表示されているセクションを確認してください。
<object id='MyMovie.swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='100%' width='100%'> <param name='allowFullScreen' value='false'/> <param name='src' value=''MyMovie.swf'/> <embed name='MyMovie.swf' pluginspage='/go/getflashplayer' src='MyMovie.swf' height='100%' width='100%' AllowFullScreen='false'/> </object>