« ななななな・・なんじゃこりゃー?! | Home | 節税 »

Sep 212005

SWFを埋め込んでいるHTMLのパス

icon_flash8.jpg常々思うのだけど、SWFを表示させているhtmlのURLって取得できないものなのでしょうか?
オレが知らないだけ?

----
add 2005.11.14
---
木本さんから情報頂きました。
base パラメータ:yoshiweb.NET-blog
http://yoshiweb.net/blog/index.php?itemid=160
Flash テクニカルノート - パラメータオプション
http://www.macromedia.com/jp/support/flash/ts/documents/fl0005.html#Base
これで全部解決できたらとてもうれしい。
---
なんかこのスレッドコメントが投稿できないようです。(自分が書いてもspamになった・・(;´Д`))

24 Comments

はじめまして。

javascriptかますのはダメなんですよね?
swfから直接取得できる方法があれば僕も知りたいです^^

はじめまして。
そですね、どっちかと言うとあまりHTML系には手を加えないで対応したいなぁと思っていたりするので・・・
ちなみにJavaScriptかますっていうのはflashVarsにlocationを埋め込むってことですか?

あ、やっぱりSWF単体のお話だったんですね。
失礼しました。

javascriptかまず場合はおっしゃる通りfunctionで
document.hoge.SetVariable("_level0.hogehoge", document.location.href);
を定義しておいて、
Flash側でgetURL(javascript:○○)で取得する感じです。
なぜかHTML側でonLoadとかで実行してもうまく渡してくれませんでした。

めんどくさいですねコレだと…。

んんん!?このやり方しらなーぃです。
Flash8で実装された方法かしら?

あ、いま調べたんですがflashVarsのほうがカンタンですね。。

http://hakuhin.hp.infoseek.co.jp/main/js/javascript.html#JAVASCRIPT_02

僕が書いていた方法は↑ここで詳しく解説されていました。
これだとFLASH5でもできそうです。
上のページにあるサンプルではフォームに入力したテキストをFLASHに送信しています。HTML側でボタンを押すアクションがあればこれでいけるみたいなんですが
flashVarsのようにフレーム再生前に変数をセットすることはできないみたいですね…

むぅ、スレ汚しになっていまいました。すいません^^;;

あ、liveconnectかな?これってモジラ系で動かなくないです?

>これってモジラ系で動かなくないです?

動かなかったです orz

反則かもしれませんが、HTTP_REFERERを返すcgiを設置するってのはどうですかね?
これならそれぞれのHTMLはいじらなくてすみそうな予感が…

>HTTP_REFERERを返すcgi
良くわかんないですが、Flashの中からrefferを返すcgiをcallするってことですよね?この場合ってhtmlのurlが戻るんですかね?
まぁそもそもの問題は開発中のSWFのプレビューで諸々相対的にXMLやらをLoadしたいときに、htmlとswfの格納場所が違う場合、開発モード、本番モードと内部変数を切り分けて起点パスとかを定義しているのですが、これが面倒だなぁというだけだったりします。
loadMovieで読み込む外部SWFに関してはif(this==_root)だけで本番、開発と切り分けるんですけど、親BODYのSWFに関しては結局プレビューモード、ローカルでのブラウザモード、HTTP経由モードの3ケースを2パターンに振り分けないといけないのでその辺毎回手でやるのは嫌だなぁと・・・(;´Д`)

自分がローカルかどうかをチェックする場合は_url.indexOf("file") == 0がtrueかどうかで判定してるんですが、これって使えません?

それだとFlash上でプレビュー表示の時と、ローカルでブラウザで表示のときでパスが一緒になってしまって動作しなくなりません??
ファイル構造としては
index.html
/swf/index.swf
/xml/data.xml
とかの構造になっている場合にそれぞれ以下の様に切り分けれたら便利だなぁあと思っております。
1)Flash上でのプレビュー(xmlへの相対パスは../xml/data.xml)
2)ローカルでのブラウザでのプレビュー(xmlへの相対パスはxml/data.xml)
3)HTTPでのブラウザのプレビュー(xmlへの相対パスはxml/data.xml)
----
今までは
/swf/check.xml
みたいなデータを作っておいて
index.swf
から
checkXML.load("check.xml")
とかを行って
onLoadがtrueの場合はFlash上からのプレビュー、
falseの場合はhtmlからのプレビューでパスは"../"とかなるようにしていましたが、flash player 8がonLoadのresultをキチンと取得してくれないんですよね・・・・(;´Д`)
バグなんで、直るとは思うんですけど、まぁなんか他に楽な方法は無いものかしら?と・・・。

あーなるほど、確かにFlashプレビューとローカルブラウザでは一緒になっちゃいますね……。これは切り分け難しいなぁ。(=_=;
何か解決策思いついたら、また書き込みます。

連続カキコすみません。一個思いついたんで。
_level0.$versionでPlayerのバージョンを取得すると、Flashプレビューとローカルブラウザでは違った結果を得られると思うので、これと上記の_url.indexOf("file") == 0使ってローカルかどうかチェックを行えば、1,2,3全て振り分けてパスを記述できると思うのですが、如何でしょうか……?(;´д`)

なるほど、そういう手もありますね。
動作チェックでプラグインのバージョンを変えたりするときには注意しないといけないですが、これなら実装できそうですね。
試させていただきます。ありがとうございますー。

あの、もう終わった話題なのかもですが、フラッシュから書き出すhtmlのテンプレートを自分で作っちゃえばいいとか...
loadvarsとかで、ローカル用とか、何とか用とか振り分けるものとか...

いや、HTMLに依存させずに切り分けたいんですよー。flashVars使っちゃうと納品の時とかに消すの忘れちゃいそうなので、SWF内部だけで完結できないかしら?というのを模索しておりました。
パスの基点がHTMLに依存するのであれば、それってSWFの中で何かしら変数として保持してるんじゃないかいな?と思って調べてみたんですがいまいち良くわかりませんでした。8ballで追加されてないかしらー。
今度事務所遊びに来てくださいませ。

ああ、ごめんなさい。人の話とか聞かないほうの人間なんです...
8ballならplayerTypeとか...コレと何かを組み合わせれば...たぶんですけど...

ぜひー。>今度事務所遊びに来てくださいませ。

>ああ、ごめんなさい。人の話とか聞かないほうの人間なんです...
なんとなくTさんとかNさんとかから話は聞いておりますので、大丈夫ですw
>playerTypeとか
ですね、8ならこれで解決できそうです。しかし結局手でパスを定義しないといけないのが悲しいなぁ。標準でプロパティぐらい用意しててくれてもいいんじゃないかしら?
ってかこれ不満に思っているのはオレだけなのかしら?

今回の話題とは少しずれますが、読み込み元のHTMLとSWFのある場所が違う場合、相対パスで記述したリンクがHTML起点になったりSWF起点になったりがブラウザによって違っていた時にも、起点となるパスが簡単に取得できたらいいのにと思っていました。(個人的にはMac IE4.5のSWFが起点になる方がしっくり来るのですが。CSSとかと同じ感じになるので)
相対パスの問題は外部ファイル使っている人共通の悩みだと思うので、いい解決方法が見つかりましたら公開していただけると嬉しいです。もちろん、時間に余裕ができたらで構いませんので……。
もし自分がパスを振り分ける必要が出てきたら、美しくはないですがHTML側からhtmlEmbed=1とかをSWFに渡して振り分けちゃうと思います……。面倒くさがりなもんで。(^_^;ゞ

パス自体の取得はできないのですが、振り分けは先に梅津さんが書いたplayerTypeとかでスタンドアロン、プレビューモード、プラグインモード、ActiveXモードの切り分けができるらしいです(8ballからです)
詳しくはこちらをどうぞうー。
http://www.eyezberg.com/Flash_News/ActionScript/System.capabilities.playerType/

わざわざURLまでありがとうございます~。8限定コンテンツはまだ当分作れそうもないのですが、これは便利なプロパティですねぇ。
更に欲を言うと、SWFが読み込まれているHTMLのパスを簡単に取得するプロパティがあると本当に便利なのですが……。
仕事でグローバルメニューにFLASHを使用するケースが増えてきて、そういう場合読み込むHTMLの階層によって相対パスがずれちゃうので、FlashVarsで階層の深さを数値で渡して、それによって「../」を階層の深さ分SWF内で追加して処理したりしているのです……。あんまりスマートじゃないので、もっと簡単にできないかなーと思っているのですが、こういうのって8では解決されているのでしょうか?

いやー今のところそれらしいものは無いようです。
今度マクロメディアの人にお願いしておきます。
・・ってadobe?

よろしくお願いします~

あれ、playerType って FlashPlayer7 から実装された機能なのでは?

あ、ホントだ・・・orz
ありがとうございますう。
ということでver7からplayerTypeで外部ファイルへのパスの切り分けは可能ですね。
----
ex)
if (System.capabilities.playerType == "External") {
cfg.path = "../";
} else {
if(this._url.indexOf("http")!=-1){
cfg.path="/"
}else{
cfg.path = "";
}
}
----
みたいな感じで切り分けできそうですね。

Leave a comment

Search and Archives