Now loading...

WordpressやFlickrのファイルアップロードがFlash Player 10で機能しない理由

Tags:

Flash Player 10だとWordpressのアップローダー(.swf)のダイアログがポップアップせず、だからファイルアップロードしようにもできなかった。何が悪いのかわからないままFlash Player 10をアンインストールしていたのだけどセキュリティの問題らしい。

The latest one that’s bugging me is a Flash 10 Player change that only allows you to open a file browse dialog via a direct user interaction such as a button push/mouse click. The idea here is to prevent malicious code from opening a file dialog and perhaps making you think it is for something else, and you wind up uploading some sensitive data to someone else’s server. I can see the point, but it’s creating some havoc.

Flash Player 10 Beta breaking WordPress, Flickr, other uploaders | BIT-101 Blog

つまりローカルファイルにアクセスできるようになった分セキュリティが厳しくなり、マウスクリック等の直接的なユーザーインタラクションのみFileReference.browse()が発動するようになっているのが原因らしい。WordpressやFlickrなどJavaScriptなどでアップローダーを遠隔発動させているところは軒並みアウトということになる。

Thanks Keith Peters, I have been suffered from the problem without any ideas.

関連リンク:

The Flash Blog » Flash Player 10 FileReference Changes
[FlashPlayer10]Flash Player 10自体のバグ・10が原因の不具合

[FlashPlayer10]Flash Player 10自体のバグ・10が原因の不具合

Tags: ,

自分でもはまった、Flash Player 10に関係するものでフォーラムなどでも挙げられているもの。個人的にはwordpressのアップローダーが機能しないのが痛すぎる。9と10って共存できるんだろうか。

[追記 2008/06/21]

FireFox拡張のFlashSwitcher(Firefox3)でプレイヤー9と10を共存させれるっぽい。うーんFirefox3への移行は腰が重いところ。

Flash Player 9と10(Astro)共存 | (SCRATCHBRAIN.BLOG v2

[FlashPlayer10]drawTrianglesで球面にテクスチャリング

Tags:

zソート等で非常に参考になったのは/as3/Astro/Torus3D_01/src/Document.as - Spark project。上記Spark projectの例の場合、プリミティブを構成する頂点座標は重複して登録させず、かわりに三角形パッチを構成する頂点座標の組み合わせをインデックスすることで多面体を作成している(詳細はdrawRectanglesの仕様参照)。この場合、各三角形を構成する頂点座標の組み合わせ情報に関してzソートを行うだけで済むので経済的なんだけど(i.e., drawRectanglesの第二引数indicesに関してのみソーティングが行われている)、それ以前にプリミティブ作成時に頂点情報の組み合わせをどうインデックス化するか思考するのが面倒くさい。

そこで今回は頂点情報が重複するのを一切気にせず各三角形パッチごとに頂点座標を計算させた(つまりdrawRectanglesの第二引数indicesを全く設定していない)。グリッド化は簡単になったのだけど、計算量が増えた(三角形パッチ数は頂点数の約二倍)こととzソートする成分がdrawRectanglesに渡す第一引数verticesと第三引数uvtDataの二つになる点が面倒くさい点か。あと幾何学的問題で、矩形画像の球面上へのテクスチャリングはどうしても極近傍に空白ができる。グリッドサイズを細かくしていけば無視できるレベルにはなるけど。ソースはswfリンク先にあります。


(要Flash Player 10)

[追記:2008/06/05]

Spark projectソースに関して補足。renderScene関数内の

vector.w = projection.focalLength / (projection.focalLength + vector.z);
vector.project();

は不要の模様。直前のworld(Matrix3Dクラス)に投影情報が含まれているので

var vector:Vector3D = world.transformVector(vertex);

この時点ですでにvectorは投影用に座標値が変換されている。あと関係ないのだけど、Vector3D.project()はVector3Dの第4引数wで第1~3引数の値を”割る”メソッドなので注意が必要。こんなかんじ。

var v:Vector3D = new Vector3D(100,100,100,2);
v.project();
trace(v);//(50,50,50)

[追記:2008/08/06]

Spark projectのソースについて作者の方よりご指摘を受けています。僕が現在Flash Player 10を使えない状況なのでまだ確認ができていません。上記情報を鵜呑みにせず、コメントも合わせて参照ください。

FileReference.loadを含むファイルをFlex Builderでコンパイルする時のチップ

Tags:

かなり限定的なシチュエーションだけど、Flex Buider 3のリリース用にコンパイルしたswfファイル内のFileReference.loadは

  • ネットワーク上で動作しない(IllegalOperationError #2014)
  • ローカルで動作する

デバッグ情報込みでコンパイルしたswfファイル(デフォルトだとbin-debug内に作成されるやつ)は

  • ネットワーク上で動作する
  • ローカルで動作する

FlexibleFactoryの方からも同様の旨のコメントをもらったのでおそらく間違った情報ではないはず。デバッグバージョンを使えばネットワーク上でも動作するから問題ないっちゃ問題ないんだけど、デバッグ情報が入ってる分ファイルサイズが結構大きくなるのが嫌。そこでプロジェクト > プロパティ > ActionScriptコンパイラ > 追加コンパイラ引数に以下を記述。

-debug=false -optimize=true

これでbin-debugに作成されるswfファイルがリリースビルドで作成されるswfファイルと同サイズになる。もちろんこのオプションだとデバッグはできないので、リリース用に書き出すギリギリに付け加えるのがいいかも。そもそも何でこんな状況になるのかは不明なので、何か情報をお持ちであればフィードバックもらえるとうれしいです。設定が面倒くさくてかないません。

FileReference.loadでサウンドをロードするライブラリ

Tags:

FileReference.loadは読み込んだデータがByteArray型になるため、ByteArrayを読み込むメソッドがないSoundクラスの場合かなり不便。FlexibleFactoryでFileReference.loadで選択したMP3ファイルを再生するパッケージが配布されている。使い方も超簡単。ローカルのMP3からサウンドスペクトラムを表示するサンプルを作ってみた。自分のチョイスした曲を無理矢理聴かせるよりは良心的かな。

[FlashPlayer10]Suck Your Music
(要Flash Player 10)

import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.FileReference;
import org.audiofx.mp3.MP3FileReferenceLoader;
import org.audiofx.mp3.MP3SoundEvent;

_loader:MP3FileReferenceLoader = new MP3FileReferenceLoader();
_loader.addEventListener(MP3SoundEvent.COMPLETE,onComplete);
_fr:FileReference = new FileReference();
_fr.addEventListener(Event.SELECT,onSelect);
stage.addEventListener(MouseEvent.CLICK,onClick);

function onClick(e:MouseEvent):void{
    _fr.browse();
}

function onSelect(e:Event):void{
    _loader.getSound(_fr);
}

function onComplete(e:MP3SoundEvent):void{
    e.sound.play();
}

Next Page →


Now loading...