Firefox3.6使用時に100%表示のフルフラッシュサイトで常にスクロールバーが表示されてしまう場合の対処方法

Firefox3.6にアップデートしたら、100%表示のフルフラッシュサイトで、ウィンドウサイズが指定した最小サイズ以下になっていないのに、常にスクロールバーが表示されてしまう現象が発生。Firefox3.5では問題なく表示できていたし、他のブラウザでも正常に表示できるようなので原因を調べてみたら、swffitが問題だったみたいです。swffitのバージョンを2.1から2.3.3(2010年1月18日リリース)にアップデートしてみたところ、スクロールバーは消えて正常に表示できるようになりました。

Progressionで作成したFlashコンテンツがFirefoxで表示できない場合の対処方法

Progressionで作成したFlashコンテンツが、Firefoxだけ表示できなく困っていたのですが、Page Saverというアドオンが原因だったみたいです。Page Saverを外してみたところFlashコンテンツが正常に表示できました。根本的な原因はよくわからないし、ProgressionとPage Saverの問題ということでもない気もしますが、念のためそれぞれのバージョンもメモしておきます。

[AS2]FlashでSWFや画像などを外部から読み込む際にキャッシュさせない

FlashコンテンツでSWFや画像データを外部から読み込む際に、ブラウザでキャッシュさせない方法をメモ。頻繁に更新する必要のあるFlashコンテンツでは、更新した内容が反映されない可能性あるので、キャッシュ対策が必要。

具体的には、読み込みたいデータのパスに「?=現時刻」をプラスしてあげて、常に別のデータとして読み込ませる。例えば、CASA FrameworkのMediaLoadを使用して、test.jpgを外部から読み込む場合のキャッシュ対策はこんな感じ(ほぼCASAのサンプルそのままです)。

this.stop();
Stage.align = "TL";
Stage.scaleMode = "noScale";

import org.casaframework.load.media.MediaLoad;

this.createEmptyMovieClip("loadZone_mc", this.getNextHighestDepth());

function onImageLoadProgress(sender:MediaLoad, bytesLoaded:Number, bytesTotal:Number):Void {
    trace(bytesLoaded + "/" + bytesTotal + " bytes have been loaded into " + sender.getMovieClip());
}

var nowDate:Date = new Date();//現時刻を取得してnowDateに設定
var mediaLoad:MediaLoad = new MediaLoad(this.loadZone_mc, "test.jpg" + "?=" + nowDate);
this.mediaLoad.addEventObserver(this, MediaLoad.EVENT_LOAD_PROGRESS, "onImageLoadProgress");
this.mediaLoad.start();

現時刻の部分は、ユニークな値であれば問題ないと思うので、乱数など他の値でもでも問題ないと思われます。ちなみに画像データだけでなく、swfやxmlなどでも同じ方法でキャッシュ対策可能。

【参考にさせて頂いたサイト】

[AS2]Flickr API経由で取得した画像がFlashで表示されない

Flashで、Flickr API経由で画像を表示するテストをしてみたら、ローカル環境では問題なく表示されるのに、サーバにアップロードしたら何も表示されない。いろいろ検証してみたところ、Flickrから取得した画像にスムージングをかけようとすると、何も表示されない模様。Flash Player8以上で、外部画像を読み込んだ場合、シャギーが出てギザギザの画像になってしまうので、スムージングを適用したかったのだけど、なかなかうまくいかなかったので、解決方法をメモ。スムージングについては、以前書いた、「[AS2]Flashで外部から読み込んだ画像データにスムージングを適用する」を参照。

System.security.loadPolicyFile("http://api.flickr.com/crossdomain.xml");
System.security.loadPolicyFile("http://farm1.static.flickr.com/crossdomain.xml");
System.security.loadPolicyFile("http://farm2.static.flickr.com/crossdomain.xml");
System.security.loadPolicyFile("http://farm3.static.flickr.com/crossdomain.xml");
System.security.loadPolicyFile("http://farm4.static.flickr.com/crossdomain.xml");

上記のスクリプトを追加すると、スムージングを適用しても問題なく表示可能でした。クロスドメインとかセキュリティーの問題と思われます。

【参考にさせて頂いたサイト】
鮭とプログラムとかサン「スライドショー 2

Webカメラを使用するFlashサイトでiSightが動作しない

Webカメラを使用するFlashサイトで、MacのiSightが動作しない場合の解決方法。OSのクリーンインストールとか、Flash Playerを何度も入れ直したりしてたら、設定方法を忘れてしまったのでメモ。

Flash Playerの「カメラとマイクへのアクセス」というダイアログで、[許可]を選択しても何も表示されないので、右クリックでFlash Playerの設定を開く。右下にあるWebカメラのアイコンをクリックして、「USB Video Class Video」を選択すれば、iSightが動くはず。

[AS2]Flashで外部から読み込んだ画像データにスムージングを適用する

Flashで外部から画像データを読み込んで、リサイズしたり回転させたりして使用する場合、シャギーが出てギザギザが目立ってしまう。Flash Player7だと、何もしなくてもスムージングがかかった状態で表示されていたみたいで、問題なかったのだけど、8以上だとギザギザになってしまう。いろいろ調べてみたら、Flash Player8から仕様が変更になったらしく、ひと手間かけないとスムージングが適用できない模様。よく使いそうなのでメモ。

flaファイルと同じ階層に「photo.jpg」を用意して、メインのタイムラインの1フレーム目に、下記スクリプトを記述すれば、外部画像にスムージングを適用可能(AS2です)。

import flash.display.BitmapData;

this.createEmptyMovieClip("containerOriginal", this.getNextHighestDepth());
this.createEmptyMovieClip("containerSmoothing", this.getNextHighestDepth());

var listenerObj:Object = new Object();
listenerObj.onLoadInit = function(){
	bitmapSmoothing();
}
var mcl:MovieClipLoader = new MovieClipLoader();
mcl.addListener(listenerObj);
mcl.loadClip("photo.jpg", this.containerOriginal);

function bitmapSmoothing() {
	var smoothImage:BitmapData = new BitmapData(this.containerOriginal._width, this.containerOriginal._height, true, 0x000000);
	smoothImage.draw(this.containerOriginal);
	this.containerSmoothing.attachBitmap(smoothImage, 0, "auto", true);
	this.containerOriginal.removeMovieClip();
}

画像を読み込んで、読み込みが完了したら、BitmapDataに変換してスムージングを適用して元画像をリムーブという流れ。元画像の読み込みが完全に完了してから、スムージング処理をしないと、うまく動作しないみたいなので注意。このスクリプトの場合、onLoadInitでロード完了を取得して、bitmapSmoothing関数でスムージングを適用してます。

元画像をリムーブしないで、角度をつけて比較してみるとこんな感じ(左がスムージング適用前で、右がスムージング適用後)。

ライブラリから読み込む場合は、プロパティからスムージングの適用を選択できるので問題はないけど、スクリプトベースで外部から引っ張ってくる場合は、こんな感じで解決するみたいです。もっと簡単な方法とかあるのかもしれないけど、とりあえずこの方法で解決しました。

【参考にさせて頂いたサイト】
AS2で読み込んだ外部画像にスムージングを適用する
FLASH8-ビットマップスムージングをスクリプトで制御したい

Flash Switcher(OS X)で、Flash Playerのバージョンが切り替えられない

Flash Playerのバージョンを簡単に切り替えることができるFirefox用のプラグイン「Flash Switcher」が、Macでなかなか正常に動かず困ったので、うまくいったときの流れをメモ。

1.アンインストーラーで現在インストール済みのFlash Playerを削除。
念のためアンインストール。必要ないかもしれないです。

2.Firefox3.0に、Flash Switcherをインストール。
この段階では、下記のFlash Playerがインストールされて、動作も切り替えも問題なし。

  • Flash 9.0 r124
  • Flash 9.0 r115

3.Flash Player 10のデバッグ版をインストール。
バージョン10.0 r22が追加されて、バージョン10に関しては問題なく動作するけど、デフォルトでインストールされていたバージョン9に、切り替えができなくなる。

4.「/Library/Internet Plug-Ins」ディレクトリの中にある、Flash Player.pluginを削除。
cellfusion blogさんの「Flash Switcher入れてみた(OSX版)」を参考にさせて頂き、「Flash Player.plugin」を削除。一旦すべてのFlash Playerが削除された状態になるけど、Flash Switcherから「10.0 r22」「9.0 r124」「9.0 r115」を選択することができて、それぞれのバージョンを再度インストールすることが可能。バージョンの切り替えもできるようになる。

その後、バージョン8などを追加しようと思ったら、インストール自体ができなくて、Flash Switcherで全てのバージョンの切り替えが、できなくなってしまったけど、再度、4の流れで「Flash Player.plugin」を削除すると正常に戻った。

よくわからないけど、バージョンの切り替えができなくなったら、「Flash Player.plugin」を削除して、それぞれのバージョンをインストールしなおせば、なんとかなりそうな感じ。現状、「9.0 r124」「9.0 r115」「10.0 r22」しか切り替えができないけど、バージョン8以前は動作確認する機会もあまりないと思うので、とりあえずこの状態で使ってみることにします。