Kousei Ikeda/Blog

2009.11.22/Flash

[2010.09.20] chromeのバージョンアップにより、wmodeによってはpopupが開かなくなったり(参考記事)と、状況が変わってます。これは当時の記事なので現状と違う部分があります。すみません。

先日公開してみたURLOpener、ブラウザの挙動のあまりの違いに落としどころがわからなくなっていましたがまとまりました。

当初はJSでwindow.openを呼んだ時の動きに合わせる!と思っていましたが、別にそんな必要ないなと。
使う側になってみて考えて、とりあえずよく使う機能を楽に使えればいいや、と切り替えました。

ダウンロード

SparkProjectに初コミットしてみましたので、Sparkのリポジトリからエクスポートして下さい。
http://www.libspark.org/wiki/ikekou/URLOpener

またはzip
http://ikekou.jp/blog/wp-content/uploads/2009/11/URLOpener.zip

よくやること

僕が考えるよくやることを列挙すると、せいぜいこんなもの。

  • target=_selfで開く
  • target=_blankで開く
  • target=_blank、サイズ指定で開く
  • target=_blank、サイズ、位置指定で開く
  • target=_blank、サイズ指定、位置は画面中央で開く
  • target=_blank、フルスクリーンで開く
  • alertでデバッグ

これらを楽にするということと、Safariでサイズ指定ある場合は先日発見した(つもりでいる)Safariでブロックを回避する方法を使って開くということ、その2点を目標としました。

できること

  • window.openよりnavigateToURLのほうが実感としてレスポンスがいいので、オプション指定ない場合はnavigateToURL、オプション指定ある場合はwindow.openと呼び分け
  • 今まであんまりできてなかったと思われる、ポップアップブロックON状態のSafariでの、Flashからのサイズ指定ポップアップを行う

できないこと

  • もともとJSでできないことができるわけではない
  • ブラウザによってはスクロールバーやらアドレスバーをオフと指定しても勝手に出る。それはどうしようもない
  • Operaはブロック設定が何段階かあるが、JavascriptではブロックされないがFlashからだとブロックされる設定がある。その設定でFlashから開けるようにしたかったが、できなかった。

使い方

使い方はこんなかんじです。

import jp.ikekou.net.urlopener.URLOpener;
import jp.ikekou.net.urlopener.URLOpenerFeatures;
import jp.ikekou.net.urlopener.URLOpenerTarget;

//引数は以下の3つ
//1
//開くURL
//2
//Target window name、一応定数用意しましたが、普通に"_blank"とか"hogeWindow"とかでOK
//3
//window.openの第三引数と同じ。よく使うセットとして
//URLOpenerFeatures.FULLSCREEN    メニューバーとか全部オフにしてフルスクリーン
//URLOpenerFeatures.DIALOG(width, height [, left, top])    メニューバーとか全部オフにしてサイズ指定の小窓、位置指定省略すると中央表示

//target=_self
URLOpener.open(url);

//target=_blank
URLOpener.open(url,URLOpenerTarget.BLANK);

//target=_blank、サイズ指定、位置指定省略すると中央
URLOpener.open(url,URLOpenerTarget.BLANK,URLOpenerFeatures.DIALOG(800,600));

//target=_blank、サイズ指定、位置指定nullにしても中央
URLOpener.open(url,URLOpenerTarget.BLANK,URLOpenerFeatures.DIALOG(800,600,null,100));

//target=_blank、サイズ指定、位置指定
URLOpener.open(url,URLOpenerTarget.BLANK,URLOpenerFeatures.DIALOG(800,600,100,100));

//target=_blank、フルスクリーン
URLOpener.open(url,URLOpenerTarget.BLANK,URLOpenerFeatures.FULLSCREEN);

//target=_blank、Featuresを自分で指定
URLOpener.open(url,URLOpenerTarget.BLANK,"width=800,height=600");

//alert出す
URLOpener.alert("hoge");

//alert出してるけど一時的にオフにして試したい
URLOpener.debugMode = false;
URLOpener.alert("fuga");

今後の予定

  • windowモード(transparentとか)によって挙動が変わるらしいので、調べる。もしかしたら全然いらんことしてるかもしれない。
  • console.log等のコンソールに出す関数を、クロスブラウザに一個の関数で出したい
  • URLOpenerFeatures.DIALOGを使ったときに色々オフする記述を入れているが、それで十分なのか、もっといい記述はないのか、見直す
  • バージョン表記ってどこにいれたらいいんだろうか!
  • 優れたライブラリを優れたものとしているのは、ステキなドキュメントの力が大きい。ステキなドキュメント作ろう。どうせちっこいちっこいライブラリだし、そんくらいできるはず。