<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>akihiro kamijo</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/" />
    <link rel="self" type="application/atom+xml" href="http://cuaoar.jp/atom.xml" />
    <id>tag:cuaoar.jp,2009-12-16://1</id>
    <updated>2010-09-10T05:46:31Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Commercial 4.261</generator>

<entry>
    <title>Flash Media Server 4 発表</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/09/flash-media-server-4.html" />
    <id>tag:cuaoar.jp,2010://1.445</id>

    <published>2010-09-10T07:39:04Z</published>
    <updated>2010-09-10T05:46:31Z</updated>

    <summary>Flash Media Server 4 が発表されました。（Adobe Fla...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="General" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>Flash Media Server 4 が発表されました。（<a href="http://www.adobe.com/jp/products/flashmediaserver/">Adobe Flash Media Serverファミリー</a>）</p>
<p>Flash Media Server 4 には Streaming Server, Interactive Server, Enterprise Server の 3 種類が用意されています。Enterprise Server は、アプリケーションレベルのマルチキャストなど RTMFP を使った大規模 P2P ネットワーク構築用の機能を持つサーバーです。</p>
<p>久しぶりのバージョンアップということもあり、たくさんの新機能や機能拡張があります。それぞれのサーバーの主な機能については、こちらのページをご覧下さい。（<a href="http://www.adobe.com/jp/products/flashmediaserver/helpmechoose.html">エディション別比較表</a>）</p>
<p>以下は、主な新機能のリストです。（製品により使える機能は違います）</p>]]>
        <![CDATA[<ul>
  <li><strong>64 bit 対応</strong>： 64 bit  OS に対応。Linux CentOS 5.3、Red Hat  Enterprise Linux 5、Windows Server  2008 をサポート</li>
  <li><strong>ピアアシストネットワーク</strong>： RTMFP を使い Flash Player  10.1 と P2P ネットワークを実現。ノード紹介機能や、ポスト、オブジェクト複製機能も</li>
  <li><strong>IP マルチキャスト</strong>： Flash Player  10.1 に IP マルチキャスト通信可能</li>
  <li><strong><strong>アプリケーションレベルのマルチキャスト</strong></strong>： IP ネットワーク上にマルチキャスト用の通信網を形成</li>
  <li><strong>マルチキャストフュージョン</strong>： IP マルチキャストとアプリケーションレベルマルチキャストを組み合わせてマルチキャストが可能</li>
  <li><strong>バッファー内データの利用</strong>： Flash Player  10.1 のバッファー内に保持されているメディアにアクセス。高速検索やスローモーション、フレームステッピングが可能。接続が切れた場合に、バッファーの再生を継続しながら再接続</li>
  <li><strong>RTMP ダイナミックストリーミング</strong>： アダプティブビットレート配信により、帯域幅の変化に合わせてストリームをすばやく切り替え </li>
  <li><strong>タイムコード</strong>： ストリーム間の同期を確実に行うためタイムコードの挿入を確実に行う</li>
</ul>
<p>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>Packager for iPhone の開発再開について</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/09/packager-for-iphone-1.html" />
    <id>tag:cuaoar.jp,2010://1.444</id>

    <published>2010-09-10T03:13:41Z</published>
    <updated>2010-09-10T03:28:53Z</updated>

    <summary>昨日 Apple が iOS の開発者規約を変更したことにより、Flash CS...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="Device" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>昨日 Apple が iOS の開発者規約を変更したことにより、Flash CS5 Professional に同梱されている Packager for iPhone による開発が可能になったようです。Flash CS5 で開発したアプリの審査も、再び許可されるようにななりました。 （少なくとも今のところ）</p>
<p> 4 月には、一旦サードパーティー製開発ツールの使用が禁止とされました。それにより、Packager for iPhone の開発も、Flash Pro 11.0.1 アップデートでの iPad 対応を最後に中断されていました。しかし、昨日の発表を受けて、アドビから Packager for iPhone の開発を再開するとのコメントが出されています （<a href="http://blogs.adobe.com/conversations/2010/09/great-news-for-developers.html">Great News for Developers</a>）。もしかすると、iOS 4.1 対応について 10 月の MAX あたりでアナウンスがあるかも？ですね。</p>
<p>一方、ブラウザ内の Flash コンテンツ再生に関しては、従来通り禁止されたままです。</p>
<p>&nbsp;</p>]]>
        
    </content>
</entry>

<entry>
    <title>Flash CS5 Professional 11.0.2 アップデート公開</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/09/flash-cs5-professional-1102.html" />
    <id>tag:cuaoar.jp,2010://1.443</id>

    <published>2010-09-09T07:14:36Z</published>
    <updated>2010-09-09T06:17:25Z</updated>

    <summary>Flash CS5 Pro のアップデーターが公開されています。 今回修正された...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="Flash Professional" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>Flash CS5 Pro のアップデーターが公開されています。</p>
<p>今回修正された主なバグは、</p>
<ul>
  <li>旧バージョンで保存された fla ファイルを開き、それを XFL   形式で保存する際、正しく保存されない場合がある</li>
  <li>一部のコンポーネントがステージに追加できない</li>
  <li> TLF のリンクされたコンテナ内のすべてのテキスト属性が保持されないことがある</li>
  <li>TLF テキストフィールド内の一部の文字に対する処理の問題</li>
</ul>
<p>です。</p>
<p>更新は、ヘルプメニューから 「アップデート」 を選択して Adobe Application Manager　を起動、です。</p>
<p>&nbsp;</p>]]>
        
    </content>
</entry>

<entry>
    <title>Adobe Developer Center の記事書きました</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/09/adobe-developer-center.html" />
    <id>tag:cuaoar.jp,2010://1.442</id>

    <published>2010-09-08T10:23:44Z</published>
    <updated>2010-09-08T12:26:43Z</updated>

    <summary>Adobe Developer Center （ADC） に 2 編の記事を書か...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="General" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>Adobe Developer Center （ADC） に 2 編の記事を書かせて頂きました。</p>
<p>その 1 は、そろそろデバイスでも Web 標準とか考える必要があるのでは？ということで書いた記事です。執筆にあたり、ミツエーリンクスの矢倉さんにインタビューさせて頂きました。インタビューは内容の濃い考えさせられる話題が多く、矢倉さんには感謝です。今回は記事の長さも考慮して、その中から一部をご紹介しています。</p>
<p><a href="http://www.adobe.com/jp/joc/devnet/dreamweaver/articles/html5_for_smartphone_tablet.html">スマートフォン／タブレット向け技術としての HTML5 の現在</a></p>
<p>その 2 は、フェーズを分けず、企画もデザインも開発も平行して行う、という新しいワークフローに挑戦したと事例があるという話を聞いて、取材したものです。こちらは、リクルート MTL の鈴木さんにお話を伺いました。とても興味深いお話なので、ぜひ読んでいただければと思います。</p>
<p><a href="http://www.adobe.com/jp/joc/devnet/air/articles/suumo_cs5.html">SUUMO（スーモ）Adobe AIR アプリケーション事例に見る新しい開発ワークフローの形と Adobe Creative Suite 5</a></p>
<p>&nbsp;</p>]]>
        
    </content>
</entry>

<entry>
    <title>Vector の新しい初期化方法 （Flex 4 &amp; Flash Professional CS5）</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/09/vector-flex-4-flash-professional-cs5.html" />
    <id>tag:cuaoar.jp,2010://1.441</id>

    <published>2010-09-06T07:41:55Z</published>
    <updated>2010-09-06T06:11:56Z</updated>

    <summary>Flash Professional CS5 と Flex SDK 4 から、初...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="Core Language" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>Flash Professional CS5 と Flex SDK 4 から、初期値を指定して Vector を初期化できるようになりました。これはコンパイラーの仕様変更です。</p>
<p>いくつかの型では、既に、インスタンスを生成する際に 3 種類の手段、初期値の指定、コンストラクターの使用、グローバル関数の使用、を利用することができました。例えば、配列の場合は以下のようにしてインスタンスを生成することができます。</p>
<pre>
// 初期値を [] 内に指定
var arr1:Array = [<span id="pageFilter" runtime="Flash::9##Lite::4##">&quot;a&quot;, &quot;b&quot;, &quot;c&quot;</span>];
 
// コンストラクターを使用
var arr2:Array = new Array(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;);
 
// グローバル関数を使用
var obj:Object = [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;];
var arr3:Array = Array(obj);
 </pre>
<p>（注：上の例の arr3 は、最初の要素に obj を持つ配列になります。つまり、arr3 は配列の配列です。ということで、この場合 Array() グローバル関数はキャストとしては使えません。Array 型で、キャストが目的のときには as 演算子を使用します。var arr3:Array = obj as Array; ）</p>
<p>Vector のインスタンス生成手段は、いままではコンストラクターもしくはグローバル関数のどちらかでした。CS5 &amp; Flex 4 からは、初期値を直接指定する構文が使えます。</p>
<h4>Vector の初期化子指定</h4>
<p>Vector は、配列と違って格納できる型が決まっています。そのため、Vector 型の属性宣言をする際、要素として持つオブジェクトの型も一緒に指定します。例えば、String を要素として持つ Vector 属性の宣言は下のように記述します。</p>]]>
        <![CDATA[<pre>var vec:Vector.&lt;String&gt;; // Stringだけを要素として持つVector型の属性
 </pre>
<p>一般的な構文として記述する際は Vector.&lt;T&gt; という表記になります。ちょっと見慣れない書き方かもしれませんが、T は任意の型の意味で、int, Object, String などの代理として使われている記号です。</p>
<pre>var vec:Vector.&lt;T&gt;; // 上のコードの一般的な書き方
 </pre>
<p>さて、Vector の初期値を指定する場合の構文は以下の通りです。</p>
<pre>new &lt;T&gt;[E0, E1, ..., En];
 </pre>
<p>配列の場合と違うのは、new が必要なこと （ちょっと面倒） と、型指定が必要なこと （&lt;T&gt; の箇所） です。[] 内の要素 （E0, E1, ..., En と書いてある箇所） の型は、T で指定された型と同じにします。</p>
<p>具体的に、0, 1, 2 を値として持つ int 用の Vector を生成するには、以下のように書きます。</p>
<pre>
var vec:Vector.&lt;int&gt; = new &lt;int&gt;[0, 1, 2];
 </pre>
<p>この方法で Vector を初期化する場合、いくつか注意事項があります。</p>
<ul>
  <li>最後にコンマを付けて良いことになっています （例：[0, 1, 2, ]）</li>
  <li>途中の要素を飛ばすことはできません （例：[0, , 2,]）</li>
  <li>指定した要素の数が、生成される Vector の長さになります</li>
  <li>Vector の長さを固定したい場合は、別途指定が必要です</li>
  <li>指定された要素の型と初期値の型が一致しない場合は、エラーになります （もしくは勝手に型変換されます） </li>
</ul>
<h4> Vector のコンストラクター</h4>
<p>ここからは特に新しい話ではありませんが、いちおう。</p>
<p>下は Vector のコンストラクターです。普通のコンストラクターと違うのは、要素型を指定するために ".&lt;T&gt;" が "Vector" と "()" の間にあることです。</p>
<pre>new Vector.&lt;T&gt;(length:uint = 0, fixed:Boolean = false);
 </pre>
<p>要素型が String の Vector インスタンスを生成するには、例えば、下のように記述します。</p>
<pre>var vec:Vector.&lt;String&gt; = new Vector.&lt;String&gt;();
 </pre>
<p>コンストラクターの引数を指定しない場合は、引数のデフォルト値が使われるので、長さが 0 の （空の） Vector インスタンスが生成されます。また、長さは可変の状態です。</p>
<p>もし、事前に必要な要素の数が分かっている場合は、コンストラクターの第 1 引数に指定します。例えば、引数に 5 を指定すると、要素を 5 つ持った Vector が生成されます。この方法は、空の Vector を作って後から要素を入れるより、パフォーマンスが多少良くなると考えられます。</p>
<pre>var vec:Vector.&lt;int&gt; = new Vector.&lt;int&gt;(5);
 </pre>
<p></p>
<p> 要素数を指定して Vector インスタンスを生成した場合、その Vector の持つ要素の初期値は指定された要素の "型" に依存します。型が null を値として持つ場合は、全ての要素の初期値が null になります。それ以外の型の場合は、その型のデフォルト値が全ての要素の初期値になります。例えば、要素型が int の場合、Vector インスタンス生成時の全ての要素の値は 0 です。</p>
<p>Vector は長さを固定にすることも可能です。コンストラクターの第 2 引数に true を指定すると、length 属性の変更や、length の値を変えるメソッド （push, pop など） は実行できなくなります。</p>
<pre>var vec:Vector.&lt;int&gt; = new Vector.&lt;int&gt;(5, true);
 </pre>
<p>長さを固定する／しないは、インスタンス生成後に fixed 属性を使って設定を変えることができます。</p>
<h4>グローバル関数</h4>
<p>Vector.&lt;T&gt;() グローバル関数を使っても Vector のインスタンスを生成することができます。利用パターンは 2 つあり、Array を Vector に変換する場合と、別の要素型の Vector に変換する場合 （例: Vector.&lt;int&gt; → Vector.&lt;String&gt;） です。</p>
<p>下は、Array オブジェクトを、String を要素として持つ Vector に変換する例です。</p>
<pre>var arr:Array = [&quot;one&quot;, &quot;two&quot;, &quot;three&quot;];
var vec:Vector.&lt;String&gt; = Vector.&lt;String&gt;(arr);
 </pre>
<p>グローバル関数は、配列内または Vector 内の個々の要素の変換も行います。（変換不能な要素があった場合はエラーが発生します）</p>
<pre>var arr:Array = [1.5, &quot;2&quot;, &quot;three&quot;];
var vec:Vector.&lt;int&gt; = Vector.&lt;int&gt;(arr);
trace(vec); // 1,2,0が出力される<br /> 
</pre>
<p>ということから、グローバル関数は Vector の要素型のキャスト目的にも利用できることになります。</p>
<p>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>Flash Professional CS5 と Flash Builder 4 の連携について</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/09/flash-professional-cs5-flash-builder-4.html" />
    <id>tag:cuaoar.jp,2010://1.440</id>

    <published>2010-09-03T03:06:48Z</published>
    <updated>2010-09-02T14:49:27Z</updated>

    <summary>Flash Builder 4 から Flash Project が追加されたこ...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="Flash Builder" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flash Professional" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>Flash Builder 4 から Flash Project が追加されたことで、Flash Builder からも FLA ファイルや XFL ファイルのパブリッシュが開始できるようになりました。ActionScript エディタとして Flash Builder を使うにはとても便利な機能ですが、2 つの大きなバグがあり、特に XFL ファイルを利用するときは Flash Project が実質的に使えないような状態でした。</p>
<p>以下が、問題になっていたバグです。</p>
<ol>
  <li>Flash Professional でドキュメントクラスを fla ファイルと同名の as ファイルとして作成した後に、Flash Builder で Flash Project を作成すると、Flash Professional で作った as ファイルが上書きされてしまう。</li>
  <li>Flash Professional から XFL ファイルとして保存した後 Flash Builder で Flash Project を作成すると、プロジェクトのフォルダーが一階層違っている。</li>
</ol>
<p>これらのバグは 6 月に公開された 4.0.1 で修正されました。ということで、これから Flash Professional と Flash Builder を一緒に使う可能性がある場合は、Flash Builder をインストールしたら、すぐに 「ヘルプ」 → 「アップデート」 と選んで、4.0.1 に更新することをお勧めします。</p>
<p>&nbsp;</p>]]>
        
    </content>
</entry>

<entry>
    <title>Melrose （Adobe AIR アプリケーション配布サービス） ベータ公開</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/08/melrose-adobe-air.html" />
    <id>tag:cuaoar.jp,2010://1.439</id>

    <published>2010-08-26T08:12:39Z</published>
    <updated>2010-08-26T05:14:12Z</updated>

    <summary>Melrose （コードネームです） Toolkit の情報が Adobe La...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="General" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>Melrose （コードネームです） Toolkit の情報が Adobe Labs に公開されました。（<a href="http://labs.adobe.com/technologies/melrose/">Melrose@Labs</a>）</p>
<p>Melrose は、AIR アプリの配布や課金と、アプリ開発者をつなげるサービスです。Melrose SDK をアプリケーションに組み込むと、Melrose ポータルを通じて、複数のアプリストアに AIR アプリを配布できるようになります。</p>
<p>いまのところ、Intel AppUp Center と Adobe AIR Marketplace の 2 つのアプリストアがサポートされています。今後、他の国も含め、ストアの数は増える予定だそうです。Melrose を利用できる開発者／ストアは、世界 47 の国に限定されますが、日本はその中に含まれています。</p>
<p>Melrose では、無償／有償どちらのアプリも配布できます。有償の場合、売り上げの 70% を受け取ることができます。配布状況を管理するための情報も Melrose ポータル経由で提供されます。いまのところ登録費は無償です。</p>
<p>Melrose SDK がサポートされるのは、Adobe AIR 1.5.3 以降のランタイムをターゲットとした、Flex Builder 3, Flash Builder 4,  Flash Pro CS5 で開発されたアプリです。Flex SDK は 3.5.1 と 4.1 のどちらかです。</p>
<p>SDK のダウンロードはこちらからどうぞ。（<a href="http://labs.adobe.com/downloads/melrose.html">Melrose Toolkit@Labs Downloads</a>）</p>
<p>&nbsp;</p>]]>
        
    </content>
</entry>

<entry>
    <title>マルチデバイス向け制作事例のイベント</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/08/post-25.html" />
    <id>tag:cuaoar.jp,2010://1.438</id>

    <published>2010-08-24T03:27:35Z</published>
    <updated>2010-08-23T14:30:18Z</updated>

    <summary>8/31 日の 6 時 （5 時半開場） より、iPhone, iPad それか...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="General" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>8/31 日の 6 時 （5 時半開場） より、iPhone, iPad それから Android をターゲットにした開発事例のセミナーがあります。場所は、大崎のゲートシティホールです。</p>
<p>無料ですが、事前登録が必要です。詳細はこちらのサイトをご覧ください。（<a href="http://adobe-ready-nwm.jp/">BE READY 5 for the new Web market</a>）</p>
<p>セッションは 3 つで、</p>
<ul>
  <li>Yahoo! Japan から、iPhone サイトのリニューアルからのノウハウや、Android 対応の際の注意点など</li>
  <li>Phone Book チームから、企画／設計／開発それぞれの段階で最適なワークフローを発見した経緯について （アニメーターなども参加していて面白いです）</li>
  <li>楽天から、マルチデバイス向けアプリの事例から学んだこと、アクセス解析により更に先に進もうとしていること</li>
</ul>
<p>についての紹介がある予定です。</p>
<p>Twitter 用に、ハッシュタグ：<a href="http://twitter.com/cs5wp/#adobeready" target="_blank">http://twitter.com/cs5wp/#adobeready</a> が用意されています。#adobeready をつけてセミナー開始までにつぶやくと、抽選で 1 名に Adobe CS5 Web Premium が当たるそうです。まだ、競争率は低そうなので、チャンスかも？</p>
<p>つぶやく内容は、セミナーにて何を学びたいか、または Web 制作社/制作者としてマルチデバイスに関して困っていること、知りたいこと、などが良いようです。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Flash Player 10.1 と AIR 2 のセキュリティ新機能</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/08/flash-player-101-air-2-1.html" />
    <id>tag:cuaoar.jp,2010://1.435</id>

    <published>2010-08-19T07:14:51Z</published>
    <updated>2010-08-19T08:53:29Z</updated>

    <summary>Flash Player 10.1 と AIR 2 から、セキュリティ関連の新し...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="10.1" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="AIR" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Security" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>Flash Player 10.1 と AIR 2 から、セキュリティ関連の新しい機能が追加されました。他のドメインから読み込むファイルの種類を制限できる機能です。</p>
<h4>セキュリティドメイン</h4>
<p>新機能の前に、セキュリティドメインについて確認です。</p>
<p>セキュリティドメインは、Flash Player に読み込んだ SWF ファイルを管理するための機能です。同じセキュリティドメイン内のリソースには自由にアクセスできますが、他のセキュリティドメイン内のリソースには （通常） 勝手にアクセスできないようになっています。</p>
<p>基本的には、SWF ファイルの置かれているサーバーのドメインごとに、セキュリティドメインが作られます。例えば、最初に読み込まれた SWF ファイルと、その SWF ファイルが読み込んだ SWF ファイルが、それぞれ別のサーバーから読み込まれた場合、2 つのセキュリティドメインがつくられます。そして、2 つの SWF ファイルは、それぞれ対応するセキュリティドメイン内に置かれます。</p>
<p>"基本的に" と書いたのは、外部ドメインのファイルを、ファイルを要求した SWF のセキュリティドメインに読み込む手段があるからです。以下の 2 つの API が提供されています。</p>
<p>1 つ目は、LoaderContext.securityDomain 属性に、読み込む側のセキュリティドメインである SecurityDomain.currentDomain を設定してから Loader.load() メソッドを呼ぶ、というものです。これで、外部ドメインのファイルでも、load() を呼んだ SWF と同じセキュリティドメインに読み込まれます。下はそのサンプルです。</p>
<pre>
var ld:Loader = new Loader();
var lc:LoaderContext = new LoaderContext();
// 読み込む側のセキュリティドメインを指定
lc.securityDomain = SecurityDomain.currentDomain;
// 第2引数にLoaderContextを指定
ld.load(new URLRequest(&quot;http://not.my.domain.jp/foo.swf&quot;), lc);
 </pre>]]>
        <![CDATA[<p>2 つ目は、Loader.loadBytes() メソッドを、2 つ目の引数にドメインを明示的に指定しない状態で呼ぶという方法です。Loader.loadBytes() は、デフォルトで loadBytes() を実行した SWF と同じセキュリティドメインにデータを読み込みます。</p>
<p>なお、外部ドメインのファイルを読み込むには、外部ドメイン側のサーバー上に、「load() を実行した SWF のドメインを信用する」 という内容のポリシーファイルが置かれていることが前提になります。</p>
<p>ちなみに、他のドメインのファイルを自セキュリティドメインに読み込む事は、ファイルを他のサーバーから自分のサーバーにコピーした後にダウンロードするのと実質的に同じです。</p>
<p>AIR のアプリケーションでは、securityDomain を指定する事ができません。そのため、外部ドメインのコンテンツを自セキュリティドメインに読み込む事はできません。</p><h4>LoaderContext.allowCodeImport</h4>
<p>それでは、本題の新機能について。外部ドメインから自セキュリティドメインに読み込めるファイルの種類を指定できる、という機能です。</p>
<p>上で触れたように、AS 3 では、2 つの API （load と loadBytes） が、他のドメインから自セキュリティドメインへの読み込みを指定できるようになっています。これらの API は、どちらも SWF ファイルと、イメージファイル （JPEG, PNG,  GIF） の読み込みに利用できます。（ポリシーファイルが正しく設定されていれば）</p>
<p>これも上で触れたように、AS 3 からコンテンツを自由に操作するには、同じセキュリティドメインにそのコンテンツを読み込む必要があります。画像データのピクセル値を取得するとか、動的に加工するとかいう場合は、画像データと処理を行う SWF が同じドメインになければなりません。</p>
<p>イメージデータは実行できるコードを持たないので、自ドメインに読み込む事にあまり抵抗は無いかもしれませんが、外部の SWF を読み込むのはちょっと怖い、かも。。。と思った人のために、イメージファイルだけクロスドメインの読み込みを許可、という指定ができるようになりました。</p>
<p>ということで、Flash Player 10.1 と AIR 2 からは、LoaderContext.allowCodeImport = false と指定すると、SWF ファイルの他ドメインから自ドメインへの読み込みは実行されなくなります。</p>
<p>下は loadBytes() を使った簡単な例です。</p>
<pre>var ld : Loader = new Loader();
ld.contentLoaderInfo.addEventListener(&quot;complete&quot;, onLoadComplete);
ld.contentLoaderInfo.addEventListener(&quot;securityError&quot;, onSecurityError);
 
var lc : LoaderContext = new LoaderContext();
// SWFを自ドメインに読み込まないよう設定
lc.allowCodeImport = false;
// 第2引数にLoaderContextを指定
ld.loadBytes(myByteArray, lc);
 </pre>
<p>このサンプルを実行すると、読み込んだコンテンツが外部ドメインの SWF ファイルだった場合は、セキュリティエラーが発生し、onSecurityError が呼ばれます。</p>
<p>LoaderContext.allowCodeImport の設定は、外部ドメインからの読み込みのみに影響します。自ドメインからであれば、LoaderContext.allowCodeImport = false の状態でも SWF を普通に読み込めます。</p>
<p>AIR には同様の属性が既に存在していました。LoaderContext.allowLoadBytesCodeExecution です。AIR アプリでは LoaderContext.securityDomain が使えないため、この属性は loadBytes() メソッド専用でした。そのため、名前もそれらしくなっています。</p>
<p>今後は、AIR アプリでも LoaderContext.allowCodeImport の使用が推奨されています。Flash Player とコードを書き分ける必要がないので、というのが理由だそうです。</p>
<p>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>Flash Player 10.1 と AIR 2 のセキュリティ仕様変更</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/08/flash-player-101-air-2.html" />
    <id>tag:cuaoar.jp,2010://1.434</id>

    <published>2010-08-18T07:38:34Z</published>
    <updated>2010-08-18T07:40:26Z</updated>

    <summary>かなり遅くなってしまいましたが、Flash Player 10.1 からセキュリ...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="10.1" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="AIR" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Security" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>かなり遅くなってしまいましたが、Flash Player 10.1 からセキュリティ上の理由で変更された仕様関連の情報です。変更は全部で 4 つあります。</p>
<p>まず、以下の 3 つは、既存のコードに影響が出る可能性のある変更です。</p>
<h4>リダイレクトされた URL の切り捨て</h4>
<p>1 つ目は、SWF ファイルやイメージを読み込んだ後に、読み込んだファイルの URL がドメイン名までしか見えなくなる、というものです。</p>
<p>この影響を受ける属性は、AS 3 では LoaderInfo.url と Sound.url それから AS 1 / AS 2 では MovieClip._url です。これらの属性値が、例えば、http://sample.jp/xxx/yyy/my.swf のはずなのに http://sample.jp/ になっている、という場合が起こりえます。</p>
<p>この状況が起きるのは、以下の 3 つの条件すべてが揃った場合です。</p>
<ol>
  <li>ファイルの読み込み中に HTTP リダイレクトが発生</li>
  <li>ファイルを要求した SWF のドメインと、読み込まれたファイルのドメインが異なる</li>
  <li>ファイルを要求した SWF が、読み込まれたファイルへのアクセス許可を持たない</li>
</ol>
<p>リダイレクトが発生した場合、リダイレクト後のURL 情報を見せない、というのが新しいセキュリティポリシーのようです。</p>
<p>URL 情報が一部隠されているかどうか、を知らせるため、AS 3 には新しい属性が追加されています。LoaderInfo.isURLInaccessible と Sound.isURLInaccessible の 2 つです 。AS 1 / AS 2 には、状況を示す属性の追加はありません。</p>
<p>リダイレクトされて （条件 1 を満たす） 他のドメインからファイルを読み込んだんだけど （条件 2 を満たす）  URL が知りたい！というときは、ファイルへのアクセス権を与えます （
条件 3 を満たさなくなる）。 設定方法は、読み込むファイルのフォーマットによって異なります。</p>
<p>読み込んだファイルが SWF の場合は、読み込まれた SWF が Security.allowDomain （AS 3） または System.security.allowDomain  （AS 1 / AS 2） を実行します。これにより、ファイルを要求した SWF にアクセス権を与えます。</p>
<p>読み込むファイルがイメージやサウンドの場合は、サーバー上のポリシーファイルを使ってアクセス許可を設定します。その際、読み込む側の SWF が AS 3 の場合には、LoaderContext.checkPolicyFile や SoundLoaderContext.checkPolicyFile の値を true にして、確実にポリシーファイルが読み込まれているようにするのが良いでしょう。</p>
<p>なお、この変更は AIR 2 のアプリケーションコンテンツには影響しません。Flash Player 10.1 上で実行される全ての SWF ファイルと、AIR 2 の非アプリケーションコンテンツが影響を受けます。</p>]]>
        <![CDATA[<h4>クリップボード消去のトリガー</h4>
<p>2 つ目は、クリップボードのデータ消去用 API は、ユーザー操作 （マウスクリックやキーの押下など） の結果として呼び出す必要がある、というものです。この変更の影響を受けるのは AS 3 の Clipboard.generalClipboard.clear() と Clipboard.generalClipboard.clearData() メソッドです。</p>
<p>既に、クリップボードへの書き込みは、ユーザー操作の結果として呼び出されるイベントハンドラー内に記述するよう変更が行われています （参考までに、書き込みが変更された時の記事は<a href="http://cuaoar.jp/2008/10/flash-player-10-8.html">こちら</a>です）。今回は、データ消去も書き込み操作の一種として扱うべき、という判断がされたようです。</p>
<p>この変更は AIR 2 のアプリケーションコンテンツには影響しません。Flash Player 10.1 上で実行される全ての SWF ファイルと、AIR 2 の非アプリケーションコンテンツが影響を受けます。</p>
<h4>for-in / for-each イタレーション順の変更</h4>
<p>3 つ目は、AS 3 で for-in や for-each を使ってオブジェクトの属性を扱うとき、ループ内に登場する順番が以前のバージョンとは異なる事がある、というものです。（AS 3 の言語リファレンスには、「for-in や for-each のイタレーションの順番は定義されていない」 と明記されているので、この変更により影響を受けること自体がたぶん問題ではあるのですが...）</p>
<p>この影響を受けるのは、オブジェクトの属性として数値 （もしくは true, false, null, undefined） と文字列 （もしくは数値以外のオブジェクト） を併用している場合です。</p>
<p>下に簡単なサンプルを示します。</p>
<pre>var obj : Object = new Object();
obj[0]     = &quot;a&quot;; // 数値
obj[&quot;one&quot;] = &quot;b&quot;; // 文字列
obj.two    = &quot;c&quot;; // 文字列
 </pre>
<p>このオブジェクトは数値と文字列を属性に持つため、イタレーションの順番が以前の Flash Player 上とは変わります。具体的には、数値が先に扱われ、文字列 （その他複雑な型） が後に回るという動きをします。</p>
<p>と書いたからといって、新しい動作に依存するようなコードは書かないようにお願いします。またいつ変わるかわかりませんし。</p>
<p>この変更は Flash Player 10.1 上で実行される全ての SWF ファイルと、AIR 2 上で実行される全てのアプリケーションコンテンツに影響します。</p>
<p>ところで、なぜこれがセキュリティ関連の変更なのか、分かる人いるでしょうか？</p>
<p>。。。</p>
<p>既存のコードに影響が出る可能性のある変更は以上 3 つです。最後の １ つは、新しい機能です。既存のコンテンツに影響を与える事はありません。詳細は次の記事までお待ちください。</p>
<p>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>Flash Player 10.1.82.76 と Adobe AIR 2.0.3 公開</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/08/flash-player-1018276-air-203.html" />
    <id>tag:cuaoar.jp,2010://1.436</id>

    <published>2010-08-16T00:39:27Z</published>
    <updated>2010-08-16T14:25:38Z</updated>

    <summary>今回の変更は大きく 2 点です。 まず、Mac 版に、ハードウェアを利用した H...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="10.1" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="AIR" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>今回の変更は大きく 2 点です。</p>
<p>まず、Mac 版に、ハードウェアを利用した H.264 ビデオの再生機能が追加されました。この機能は、OS X 10.6.3 以降の Apple Video Decode Acceleration framework がサポートされる Mac 上で利用可能です。より詳しい機種情報は、<a href="http://cuaoar.jp/2010/05/flash-player-gala.html">以前の記事</a>をご参照ください。</p>
<p>それから、セキュリティ関連の修正が行われました。</p>
<p>修正された問題は 6 つで、重要度は非常に高いため、すみやかに最新版へのアップデートが推奨されています。対象となるのは、全てのプラットフォーム （Android 版を除く） の Flash Player 10.1.53.64 以前の全てのバージョンと、Adobe AIR 2.0.2.12610 以前の全てのバージョンです。</p>
<p>Flash Player 10 のサポートされない環境 （Windows 98, Windows ME, OSX 10.1-10.3, RHEL 3 &amp; 4） 用に、Flash Player   9.0.280 もあわせて公開されています。</p>
<p>ダウンロードページは、</p>
<ul>
  <li>Flash Player 10.1<a href="http://www.adobe.com/go/getflashplayer_jp"><br />
    http://www.adobe.com/go/getflashplayer_jp</a></li>
  <li>Adobe AIR 2 <br />
    <a href="http://www.adobe.com/go/getair_jp"> http://www.adobe.com/go/getair_jp</a></li>
  <li>Flash Player 9<br />
    <a href="http://www.adobe.com/go/kb406791">Flash Player 9 for older operating systems</a> （Safari は正しく表示されない場合があります）</li>
</ul>
<p>です。</p>
<p>デバッグ版とスタンドアローン版は、<a href="http://www.adobe.com/support/flashplayer/downloads.html#fp10">Flash Player Support Center</a> からダウンロードできます。Flash CS3 Professional と Flex 3 用に、Flash Player 9.0.280 も同じページにあります。</p>]]>
        <![CDATA[<p>追記：</p>
<p>AIR 2.0.3 には 2 点の機能追加があります。また、幾つかのバグ修正が行われています。</p>
<ul>
  <li>Windows での HTTP 応答圧縮のサポート<br />
Windows 上の AIR アプリケーションで GZIP または Deflate を使用して圧縮された HTTP  応答を受け付けられるようになりました。Mac および Linux では、この機能は AIR 2.0.2 から使えます。（名前空間に AIR 2 以降を指定したアプリケーションのみ）</li>
  <li>タイマーの動作の変更<br />
  タイマーが指定された間隔で実行されるようになりました。AIR 2.0.3 より前は、タイマーが実行したコードが終わってから、次のタイマー計測が始まっていました。そのため、指定した間隔よりも長めの間隔でタイマーイベントが発生していました。AIR 2.0.3 上で実行される全ての AIR アプリケーションが、この影響を受けます。（Flash Player 10.1  も同様の振る舞いに変更されています）</li>
</ul>
<p>AIR 2.0.3 は実行環境のみのリリースです。SDK は引き続き AIR 2.0.2 SDK を使用します。バグ修正の件など、その他詳細はリリースノートをご覧ください。（<a href="http://www.adobe.com/support/documentation/jp/air/2_0_3/releasenotes_developers.html">Adobe AIR 2.0.3 開発者向けリリースノート</a>）</p>
<p>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>Flash Player 10.1　のエラー処理機能 （グローバルエラー編 2）</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/08/flash-player-101-2-1.html" />
    <id>tag:cuaoar.jp,2010://1.433</id>

    <published>2010-08-11T03:13:39Z</published>
    <updated>2010-08-08T06:02:05Z</updated>

    <summary>今回は、外部 SWF ファイルを読み込んだ際の、未処理エラーの扱いについての話で...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="Error" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>今回は、外部 SWF ファイルを読み込んだ際の、未処理エラーの扱いについての話です。</p>
<h4>外部 SWF ファイルの未処理エラー</h4>
<p>Loader オブジェクトを使って、外部の SWF ファイルを読み込んだ場合を想定します。このとき、読み込まれた側の SWF ファイル内で未処理のエラーが発生すると、SWF ファイルの階層内でイベントフローが発生します。</p>
<p>例えば、foo.swf が bar.swf を読み込んだとします。その状態で bar.swf 内で未処理のエラーが発生した場合、UncaughtErrorEvent イベントは、それぞれの SWF ファイルの Loader と LoaderInfo オブジェクト間で、以下の順にディスパッチされます。</p>
<ol>
  <li>foo.swf の LoaderInfo (キャプチャフェーズ) </li>
  <li>foo.swf 内の Loader (キャプチャフェーズ)  </li>
  <li>bar.swf の LoaderInfo (ターゲットフェーズ) </li>
  <li>foo.swf 内の Loader (バブリングフェーズ) </li>
  <li>foo.swf の LoaderInfo (バブリングフェーズ) </li>
</ol>
<p>これにより、読み込んだ側の SWF ファイル （foo.swf） 内でも、読み込まれた側 （bar.swf） の未処理のエラーイベントを受け取ることができます。</p>
<p>（AS1/2 の SWF ファイルを読み込んだ場合は、UncaughtErrorEvent が発生しません。また、HTMLLoader 内に読み込んだ HTML コンテンツ内での JavaScript エラーも、イベントとして通知されません）</p>
<p>なので、未処理エラーの処理方針として、とりあえずエラーが受け取れればよい、という場合であれば、LoaderInfo にイベントハンドラーを追加するだけで OK ということになります。どの SWF で未処理のエラーが発生しても、最終的にバブリングフェーズで LoaderInfo に通知されるからです。（上のステップ 5）</p>
<p>一方、発生元の SWF ごとに受け取る箇所を分けたい、という場合には、</p>
<ul>
  <li>外部 SWF ファイルを読み込む Loader オブジェクトに UncaughtErrorEvent 用イベントハンドラーを追加</li>
  <li>そのハンドラー内で stopPropagation() を呼ぶ</li>
</ul>
<p>とすると、自身の未処理エラーは LoaderInfo、読み込んだ SWF ファイルの未処理エラーはそれぞれの SWF ファイルが読み込まれている Loader、という分け方ができます。</p>
<p>下は、Loader オブジェクトで未処理のエラーを受け取る場合のサンプルです。</p>]]>
        <![CDATA[<pre>
import flash.events.UncaughtErrorEvent;
 
public class UncaughtErrorEventExample extends Sprite
{
  var loader:Loader;
 
<span id="pageFilter4">  public function LoaderUncaughtErrorEventExample()
  {
    loader = new Loader();
    loader.uncaughtErrorEvents.addEventListener(
        UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);
    loader.load(new URLRequest(&quot;bar.swf&quot;));
  }</span>
  private function onUncaughtError(event:UncaughtErrorEvent):void
  {
    event.stopPropagation();
    // エラー処理を記述
  }
}
 </pre>
<h4>stopPropagation() の動作について</h4>
<p>stopPropagation() メソッドを呼んだ場合、イベントフローは、その時点でターゲットとなっているオブジェクトで終わり、フローの後続のオブジェクトにはイベントが伝わりません。</p>
<p>UncaughtErrorEvent の場合は、この点がすこし異なります。Loader オブジェクトの UncaughtErrorEvents （末尾に s 付いてます） は、読み込まれた SWF 内の LoaderInfo の UncaughtErrorEvents とペアとして扱われます。先の例では、foo.swf 内の Loader と bar.swf の LoaderInfo がペアの関係になります。</p>
<p>そして、イベントフローがペアの LoaderInfo → Loader の順だったとして、LoaderInfo に登録されている UncaughtErrorEvent のイベントハンドラーが stopPropagation() を呼んだ場合、フローは LoaderInfo では止まらずにペアの Loader にも伝わってから終了します。</p>
<p>これに対して、stopImmediatePropagation() メソッドを呼んだ場合は、通常のイベントフローと同様に、その場でイベントフローが終了します。同じオブジェクトに登録されている他のイベントハンドラーも （まだ呼ばれていないものがあった場合） 呼ばれません。</p>
<h4>デバッグ版でのエラーダイアログ</h4>
<p>Flash Player や AIR のデバッグ版を使うと、未処理の実行時エラーが発生するたびに、ダイアログが表示されてエラー情報が通知されます。この動きは、UncaughtErrorEvent のイベントハンドラーを追加して、未処理のエラーを受け付けるようにしても変わりません。</p>
<p>エラーダイアログが表示されないようにしたいときは、イベントハンドラー内で UncaughtErrorEvent イベントに対して preventDefault() メソッドを呼ぶとよいようです。</p>
<p>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>Flash Player 10.1　のエラー処理機能 （グローバルエラー編）</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/08/flash-player-101-6.html" />
    <id>tag:cuaoar.jp,2010://1.432</id>

    <published>2010-08-10T03:01:38Z</published>
    <updated>2010-08-11T04:05:38Z</updated>

    <summary>ようやく、Flash Player 10.1 の新機能の話です。 前回までは、実...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="Error" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>ようやく、Flash Player 10.1 の新機能の話です。</p>
<p>前回までは、実行時エラーには、同期／非同期の 2 種類があること、それぞれ catch ブロックまたはイベントハンドラーを使って処理すること、という話でした。</p>
<p>Flash Player 10.1 と AIR 2 からは、「実行時エラーが発生したが catch ブロックにもイベントハンドラーにも渡されなかった」 という状況が起きると、UncaughtErrorEvent が生成されます。これにより、処理されなかったエラーの情報が通知されるため、エラー処理をこまごまと記述しなくても、とりあえずどんなエラーが起きたのかを知ることができます。</p>
<p>とはいえ、同期エラーが起きた場合であれば、スクリプトの実行が途中で終わってしまっている可能性があります。また、非同期エラーだった場合も、エラーの原因となったりソースにアクセスできるとは限りません。</p>
<p>つまり、グローバルエラーハンドラーは、状況を知るのには役立ちますが、それで問題が解決できるかというと、それはまた別の話なのです。アプリケーションが不安定になるようなエラーに対しては、やはり明示的なエラー処理の記述が必要そうです。（あたりまえですが）</p>
<h4>UncaughtErrorEvent ハンドラーの追加</h4>
<p>さて、UncaughtErrorEvent は、以下の 2 つのオブジェクトからディスパッチされます。</p>
<ul>
  <li> LoaderInfo.uncaughtErrorEvents<br />
  SWF 自身のコードによる未処理のエラーを通知</li>
  <li> Loader.uncaughtErrorEvents<br />
  Loader に読み込んだ SWF 内のコードによる未処理のエラーを通知</li>
</ul>
<p>どちらのオブジェクトも UncaughtErrorEvents オブジェクトです。UncaughtErrorEvents は EventDispatcher のサブクラスで UncaughtErrorEvent ディスパッチ専用のクラスです。（ディスパッチする側とされる側の違いが、名前の最後の s の有無だけなのです。ややこしい）</p>]]>
        <![CDATA[<p>ともあれ、これらのオブジェクトにイベントハンドラーを追加すればよいわけです</p>
<p>LoaderInfo に UncaughtErrorEvent イベントハンドラーを追加するときは、コンストラクタ内で行うのがよいと思われます。</p>
<pre>
import flash.events.UncaughtErrorEvent;
 
public class UncaughtErrorEventExample extends Sprite
{
  public function UncaughtErrorEventExample()
  {
    loaderInfo.uncaughtErrorEvents.addEventListener(
        UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);
  }
 
  private function onUncaughtError(event:UncaughtErrorEvent):void
  {
    // エラー処理を記述 
  }
}
 </pre>
<p>Flex の場合は、ApplicationComplete イベントのタイミングで追加する、という感じでしょうか。</p>
<pre>&lt;s:WindowedApplication xmlns:fx=&quot;http://ns.adobe.com/mxml/2009&quot; <br />                       applicationComplete=&quot;onApplicationComplete();&quot;&gt;<br />  &lt;fx:Script&gt;<br />    &lt;![CDATA[
      import flash.events.UncaughtErrorEvent;
            
      private function onApplicationComplete():void
      {
        loaderInfo.uncaughtErrorEvents.addEventListener(
            UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);
      }
 
      private function onUncaughtError(event:UncaughtErrorEvent):void
      {
        // エラー処理を記述 
      }
    ]]&gt;<br />  &lt;/fx:Script&gt;<br /><span id="pageFilter">&lt;/s:WindowedApplication&gt;</span>
 </pre>
<p>イベントハンドラーの書き方についてですが、</p>
<p>UncaughtErrorEvent には error という属性があり、ここに未処理のエラーオブジェクト、すなわち Error オブジェクト （同期エラーの場合） や ErrorEvent オブジェクト （非同期エラーの場合） が設定されます。</p>
<p>ただし、以前の記事にも書いたように、スクリプトから任意の型のオブジェクトを throw することが可能です。なので、UncaughtErrorEvent のハンドラーでは、Error、ErrorEvent、それ以外、の 3 種類の  （最低でも） オブジェクトを扱えるようにします。</p>
<pre>
function onUncaughtError(event:UncaughtErrorEvent):void
{
  var message:String;
 
  if (event.error is Error)
  {
    message = Error(event.error).message;
  }
  else if (event.error is ErrorEvent)
  {
    message = ErrorEvent(event.error).text;
  }
  else
  {
    message = event.error.toString();
  }
}
 </pre>
<p>8/11 追記： ステータスイベントによるエラー通知 （NetStatusEvent.info.level や StatusEvent.level の値が error） の場合には、エラーが未処理でも UncaughtErrorEvent がディスパッチされません。イベントハンドラー内に、ステータスイベントを扱うための記述は不要です。</p>
<p>Loader に読み込んだ外部 SWF のグローバルエラーハンドラー使用については、次回に続きます。</p>
<p>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>Flash Player 10.1　のエラー処理機能 （非同期エラー編）</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/08/flash-player-101-5.html" />
    <id>tag:cuaoar.jp,2010://1.431</id>

    <published>2010-08-06T07:33:41Z</published>
    <updated>2010-08-06T07:44:22Z</updated>

    <summary>良く考えたら、タイトルは 「Flash Player 10.1 と AIR 2 ...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="Error" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>良く考えたら、タイトルは 「Flash Player 10.1 と AIR 2 の．．．」 にすべきでした。</p>
<p>という話は置いておいて、</p>
<p>非同期で行われる処理の場合 （ネットワーク経由のダウンロードとか）、エラーの通知も非同期に行われます。その際、エラーの発生はイベントという手段で通知されます。そのため、非同期エラーの処理は、非同期処理を行うクラスにイベントハンドラーを追加する、という形になります。</p>
<p>非同期エラーを通知するイベントは、以下の 2 種類に分けることができます。</p>
<ol>
  <li>ErrorEvent のサブクラスによる通知<br />
    エラーの種類ごとに提供されるイベントクラスを使用。AsyncErrorEvent、IOErrorEvent など。（一覧はこの  <a href="#errorevents">記事の最後</a>にあります）</li>
  <li>ステータス通知イベントの属性値による通知<br />
    NetStatusEvent や StatusEvent の属性値を使用。info.level もしくは level 属性の値が error になる。</li>
</ol>
<p>ネットワーク関連のクラスは、両方の手段を使います。</p>
<p>それぞれ簡単な例を挙げておきます。</p>
<h4>ErrorEvent のサブクラスによる通知の例</h4>
<p>まず、ErrorEvent の例から。</p>]]>
        <![CDATA[<pre>var loader:URLLoader;
var request:URLRequest;
  
loader = new URLLoader();
// イベントリスナーの追加
loader.addEventListener(IOErrorEvent.IO_ERROR, onError);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
 
// ファイルの読み込み
request = new URLRequest();
request.url = "myfile.xml";
loader.load(request);
 
// 非同期エラーの処理用ハンドラー
function onError(event:ErrorEvent):void {
  trace("Error: " + event.text);
  if(event is IOErrorEvent) {
    request.url = &quot;http://www.myserver.jp/myfile.xml&quot;;
    loader.load(request);  
  }
}
 </pre>
<p>ErrorEvent は text 属性にエラー情報を示すテキストが設定されます。その他は見ての通り、普通のイベント処理とおんなじです。というか、特に意識する必要もないかんじですね。</p>
<h4>ステータス通知イベントの例</h4>
<p>次に、ステータス通知の例です。</p>
<p>このパターンを持つクラスは、以下の 8 つです。（だと思います - とりあえず今のところ）</p>
<ul>
  <li>NetStatusEvent.info.level
    <ul>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/net/NetConnection.html">NetConnection</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/net/NetStream.html">NetStream</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/net/SharedObject.html">SharedObject</a></li>
    </ul>
  </li>
  <li> StatusEvent.level
    <ul>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/events/HTTPStatusEvent.html">HTTPStatusEvent</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/media/Camera.html">Camera</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/media/Microphone.html">Microphone</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/net/LocalConnection.html">LocalConnection</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/air/net/ServiceMonitor.html">ServiceMonitor</a></li>
    </ul>
  </li>
</ul>
<p>こちらもサンプルです。</p>
<pre>var videoURL:String = "video.flv";
var nc:NetConnection;
 
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
nc.connect(null);
 
function onNetStatus(event:NetStatusEvent):void {
  if (event.info.level == &quot;error&quot;)
  {
　　　　trace(&quot;NetStatusError: &quot; + event);
    // その他必要な処理を記述
  }
  else
  {
    // event.info.code の値に応じて適当な処理を記述
  }
}
 
function onSecurityError(event:SecurityErrorEvent):void {
　　trace("SecurityError: " + event);
}
 </pre>
<p>ステータス通知の場合は、level の値が error かどうかで、エラーの発生を判断します。</p>
<h4><a name="errorevents" id="errorevents"></a>エラーイベント一覧</h4>
<p>最後に非同期エラー関連のイベント一覧です。</p>
<ul>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/events/ErrorEvent.html">ErrorEvent</a></li>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/events/AsyncErrorEvent.html">AsyncErrorEvent</a></li>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/air/update/events/DownloadErrorEvent.html">DownloadErrorEvent</a></li>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/events/DRMAuthenticationErrorEvent.html">DRMAuthenticationErrorEvent</a></li>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/events/DRMErrorEvent.html">DRMErrorEvent</a></li>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/events/IOErrorEvent.html">IOErrorEvent</a></li>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/events/SecurityErrorEvent.html">SecurityErrorEvent</a></li>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/fl/video/SkinErrorEvent.html">SkinErrorEvent</a></li>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/events/SQLErrorEvent.html">SQLErrorEvent</a></li>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/air/update/events/StatusFileUpdateErrorEvent.html">StatusFileUpdateErrorEvent</a></li>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/air/update/events/StatusUpdateErrorEvent.html">StatusUpdateErrorEvent</a></li>
</ul>
<p>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>Flash Player 10.1　のエラー処理機能 （カスタムエラー編）</title>
    <link rel="alternate" type="text/html" href="http://cuaoar.jp/2010/08/flash-player-101-4.html" />
    <id>tag:cuaoar.jp,2010://1.430</id>

    <published>2010-08-05T07:58:39Z</published>
    <updated>2010-08-04T13:44:50Z</updated>

    <summary>引き続き、実行時エラーの処理に関する話題です。前回は、同期エラーを捕まえる方法に...</summary>
    <author>
        <name>ackie</name>
        
    </author>
    
        <category term="Error" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://cuaoar.jp/">
        <![CDATA[<p>引き続き、実行時エラーの処理に関する話題です。前回は、同期エラーを捕まえる方法についてでした。</p>
<h4>デバッグ用プレーヤーと通常のプレーヤーでの動作の違い</h4>
<p>最初に、ちょっと話題が逸れますが、デバッグ用の実行環境を使う際の注意点す。</p>
<p>Flash Professional や Flash Builder をインストールすると、デバッグ用の実行環境が付いてきます。（単独でも入手できます） Flash が表示されている領域で、右クリックしてコンテキストメニューに 「デバッガー」という項目が表示されたら、デバッグプレーヤーがインストールされている状態です。</p>
<p>デバッグプレーヤーでは、エラーが発生した際、通常の実行環境よりも多くの情報を取得することができます。具体的には、以下の 2 点です。</p>
<ul>
  <li>Error.getStackTrace() メソッドで、エラーが発生時の呼び出しスタックを取得できる。この属性は同期エラーの場合のみ利用可能。</li>
  <li>Error.message 属性に、詳細な情報が設定される。通常のプレーヤーでは、大抵は Error.errorID と Error.name   属性の組み合わせの短いテキスト。</li>
</ul>
<p>他の Error の属性に関しては、どちらの実行環境でも同じになります。</p>
<h4>throw 文</h4>
<p>では、以下、話を戻して、</p>
<p>スクリプトから、明示的にエラーの発生を通知するには、throw 文を使います。</p>
<pre>
var myError = new ApplicationError(&quot;エラー発生&quot;);
throw myError;
 </pre>
<p>上のスクリプトが try ブロックで囲まれていた場合、後続の catch ブロックに throw されたオブジェクトが渡されます。下は、その例です。</p>]]>
        <![CDATA[<pre>
try
{
  var myError = new ApplicationError(&quot;エラー発生&quot;);
  throw myError;
}
catch (error:Error)
{
  // このブロックにジャンプする。以下の行を実行。
  trace(error.message);
  throw error;
}
 </pre>
<p>上記サンプル内の catch ブロックでは、エラーオブジェクトを再び throw しています。このようにして、一旦処理したエラーを、さらに上位の try..catch 文に渡すこともできます。</p>
<p>Java の場合、throw を含むメソッドは、メソッドの定義に 「エラーを投げます」 という宣言を付ける必要がありますが、ActionScript ではその必要はありません。</p>
<p>ちなみに、throw 文にはどんなオブジェクトも渡せます。例えば、以下のコードはコンパイルも実行も問題なく行われます。</p>
<pre>throw new Sprite()；
 </pre>
<p>ただし、できるからといって、Error もしくはそのサブクラス以外のオブジェクトを throw することは推奨されていません。</p>
<p>ですが、人の作った SWF ファイルを読み込むときなど、エラー時にどんなオブジェクトが渡されるか不明な場合もあるかもしれません。グローバルエラーハンドラーを使うときは、Error 以外の型のオブジェクトが渡される場合も想定しておいた方が安全かもです。</p>
<p>詳細は、別途説明しますが、少なくとも以下の 3 種類には対応するのがよいと思われます。</p>
<pre>
if (event.error is Error)
{
  message = Error(event.error).message;
}
else if (event.error is ErrorEvent)
{
  message = ErrorEvent(event.error).text;
}
else
{
  message = event.error.toString();
}
　</pre>
<h4>カスタムエラークラスの作成</h4>
<p>さて、理由はともあれ、エラー発生時にどうしても Sprite オブジェクトを返したい場合、カスタムのエラークラスを作成するのが　（たぶん） よい方法です。</p>
<p>通常は、アプリケーション固有のエラーに対する処理を記述できるようになりたいとき、カスタムのエラークラスを定義することが多いのではないかと思います。</p>
<p>カスタムのエラークラスは Error のサブクラスとして定義します。</p>
<pre>public class CustomError extends Error
{
  public function CustomError(message:String = &quot;&quot;, errorID:int = 0)
  {
    super(message, errorID);
  }
}
 </pre>
<p>エラーの基本属性は、errorID, message, name ですが、より凝った情報を持っている場合は toString() を上書きすると便利な場合があるかもしれません。</p>
<h4>Error クラス一覧</h4>
<p>Error クラスは、大きく 2 種類に分けられます。</p>
<ol>
  <li>コアの Error クラス
    <ul>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/Error.html">Error</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/ArgumentError.html">ArgumentError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/DefinitionError.html">DefinitionError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/EvalError.html">EvalError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/RangeError.html">RangeError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/ReferenceError.html">ReferenceError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/SecurityError.html">SecurityError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/SyntaxError.html">SyntaxError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/TypeError.html">TypeError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/URIError.html">URIError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/VerifyError.html">VerifyError</a></li>
    </ul>
  </li>
  <li>ランタイムの Error クラス （flash.error パッケージ）
    <ul>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/errors/DRMManagerError.html">DRMManagerError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/errors/EOFError.html">EOFError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/errors/IllegalOperationError.html">IllegalOperationError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/errors/InvalidSWFError.html">InvalidSWFError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/errors/IOError.html">IOError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/errors/MemoryError.html">MemoryError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/errors/ScriptTimeoutError.html">ScriptTimeoutError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/errors/SQLError.html">SQLError</a></li>
      <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/errors/StackOverflowError.html">StackOverflowError</a></li>
    </ul>
  </li>
</ol>
<p>上記 2 つ以外に、Flash コンポーネントの Error クラスもあります。</p>
<ul>
  <li><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/fl/video/VideoError.html">VideoError</a></li>
</ul>
<p>次回は、非同期エラーの処理について。</p>
<p>&nbsp;</p>]]>
    </content>
</entry>

</feed>
