トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     別HTMLのswfへデータを渡すには
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ReyHori
Åê¹ÆNo.32496
投稿日時: 2007-3-16 0:08
新米
居住地: 神奈川県川崎市
投稿: 20
使用環境:
別HTMLのswfへデータを渡すには
当サイトにはいつもお世話になっております。

ブラウザを使ってローカルで動作するアプリ(写真集のようなもの)を設計しているのですが、それぞれ別のHTML内にあるswf同士でデータを受け渡す方法を検討していて悩んでいます。

あるページにswf-A(例えば目次)があり、その中のボタン群をクリックしたらブラウザが遷移して(あるいは_blankウインドウを開いて)そこにあるswf-Bにswf-Aから「どのボタンが押されたのか」の情報を渡す方法、を考えているわけです。

今のところ次のような方法を検討しました:

(0) swf-AからgetURL("XXXX.html?x=NNN")でページを遷移、遷移先のページではクエリストリング(x=NNN)をlocation.searchで取り出し、これをFlashVars経由でswf-Bで読み取る。

(1) swf-AからExternalnterfaceを使ってJavascript関数を起動、そこからクエリストリング付きでページを遷移(location.href="XXXX.html?x=NNN"、といった感じ)。遷移先のページではクエリストリングをlocation.searchで取り出し、これをFlashVars経由でswf-Bで読み取る。

(2) swf-BからSharedObjectを使ってデータを保存、ページ遷移はgetURLを使って行い、遷移先のswf-BがSharedObjectを読み込んで処理する。

……予備的な実験をしてみたのですが、上記のうち、(0)はgetURLではクエリストリングが渡せず、断念しました。(1)は環境を選ぶ傾向があるようで、手元のあるWindows環境では動くのに、別のWindows環境では動かない(ブラウザは同一)という厄介な傾向を見せています。

(2)の方法でも良いのですが、「こんな方法があるよ」とか「このクラスを使えば簡単確実」というようなアドバイスがあればお寄せ戴けると嬉しいです。どうぞ宜しくお願いします。
Fumio
Åê¹ÆNo.32497
投稿日時: 2007-3-16 0:24
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
Re: 別HTMLのswfへデータを渡すには
LocalConnectionを使われたらいかがですか。
引用:
Rey.Horiさんは書きました:
ブラウザを使ってローカルで動作するアプリ(写真集のようなもの)を設計しているのですが、それぞれ別のHTML内にあるswf同士でデータを受け渡す方法を検討していて悩んでいます。

あるページにswf-A(例えば目次)があり、その中のボタン群をクリックしたらブラウザが遷移して(あるいは_blankウインドウを開いて)そこにあるswf-Bにswf-Aから「どのボタンが押されたのか」の情報を渡す方法、を考えているわけです。


----------------
 

Hiroike
Åê¹ÆNo.32498
投稿日時: 2007-3-16 0:56
新米
居住地: 北海道
投稿: 15
使用環境:
Re: 別HTMLのswfへデータを渡すには
(0)の方法は"?"をエンコードすれば動くのではないでしょうか?

getURL("XXXX.html%3Fx=NNN");
ReyHori
Åê¹ÆNo.32516
投稿日時: 2007-3-16 17:53
新米
居住地: 神奈川県川崎市
投稿: 20
使用環境:
Re: 別HTMLのswfへデータを渡すには

こんにちは、野中さん。コメントありがとうございます。ご著書はいつも拝読しております(理解できているかはともかく……)。

LocalConnectionは「同時に起動しているswf同士の通信手段」と理解しておりました。今回のようにブラウザのページ遷移を間にはさんでの通信手段になるか、調べてみることにします。

ReyHori
Åê¹ÆNo.32517
投稿日時: 2007-3-16 17:54
新米
居住地: 神奈川県川崎市
投稿: 20
使用環境:
Re: 別HTMLのswfへデータを渡すには
こんにちは、Hiroikeさん。コメントありがとうございます。

URLエンコードは思い付きませんでした。言われてみればごもっともなことでした。早速試してみることにします。

ReyHori
Åê¹ÆNo.32524
投稿日時: 2007-3-16 23:10
新米
居住地: 神奈川県川崎市
投稿: 20
使用環境:
Re: 別HTMLのswfへデータを渡すには

Hiroikeさんご指摘の方法を試してみましたが、結果はNGでした。オフラインで動作するのはWin+IE(WIndowsXP Pro+IE6.0)だけで、FirefoxやMac環境では「ページが見つかりません」エラーになりました。オンラインでは動作しそうな感じですけども(実験はしていませんが)。

以上報告まで。

ReyHori
Åê¹ÆNo.32526
投稿日時: 2007-3-17 0:44
新米
居住地: 神奈川県川崎市
投稿: 20
使用環境:
Re: 別HTMLのswfへデータを渡すには

野中さんにヒントを戴いたLocalConnectionですが、作例を拝見して別ウインドウを開く場合の方法は(なんとか)理解しました。

が、やはり同一ウインドウでの遷移(_selfで開く)の場合にはLocalConnectionでデータを渡すことはできないように思うのですが……間違ってますでしょうか?

引き続き、他の方法のアドバイスもお待ちしています>皆様。

mayor
Åê¹ÆNo.32527
投稿日時: 2007-3-17 1:30
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
Re: 別HTMLのswfへデータを渡すには
引用:
Rey.Horiさんは書きました:
が、やはり同一ウインドウでの遷移(_selfで開く)の場合には

であれば、下記の赤字部分については、撤回されるべきでは?
引用:
あるページにswf-A(例えば目次)があり、その中のボタン群をクリックしたらブラウザが遷移して(あるいは_blankウインドウを開いて)そこにあるswf-Bにswf-Aから「どのボタンが押されたのか」の情報を渡す方法、を考えているわけです。


ExternalInterface を用いても、できると思いますが。
どのような方法で試されたのか、具体的に示された方が良いのではないのでしょうか?

サンプル

MacOSX 10.3.9 + Safari 1.3.9 / Firefox 1.5.0.4 + FlashPlayer9.0r28
では、ローカルでも一応動いていますので、
参考まで。

送り手 swf
import flash.external.ExternalInterface;

page2Btn.onRelease = function():Void {
	ExternalInterface.call("jumpURL", "t663682.html", "page=2");
};
page4Btn.onRelease = function():Void {
	ExternalInterface.call("jumpURL", "t663682.html", "page=4");
};

送り手 html
<script type="text/javascript">
	function jumpURL(url, query) {
		location.href = url + "?" + query;
	}
</script>
<script type="text/javascript" src="swfobject.js"></script>

<div id="flashcontent">
</div>
<script type="text/javascript">
	// <![CDATA[
	var so = new SWFObject("t663681.swf", "t663681", "300", "120", "8.0.24.0", "#FFFFFF");
	so.addParam("allowScriptAccess", " always");
	so.addParam("loop", "true");
	so.addParam("quality", "best");
	so.addParam("menu", "false");
	so.write("flashcontent");
	// ]]>
</script>


受け手 swf
if (Number(page) > 0) {
	result_txt.text = page;
} else {
	result_txt.text = 0;
}

受け手 html
<script type="text/javascript" src="swfobject.js"></script>

<div id="flashcontent">
</div>
<script type="text/javascript">
	// <![CDATA[
	var str = location.search.substr(1);
	var arr = str.split("=");
	var so = new SWFObject("t663682.swf", "t663682", "300", "120", "8.0.24.0", "#FFFFFF");
	so.addParam("allowScriptAccess", "always");
	so.addParam("loop", "true");
	so.addParam("quality", "best");
	so.addParam("menu", "false");
	so.addVariable(arr[0], arr[1]);
	so.write("flashcontent");
	// ]]>
</script>

受け手 swf で、gotoAndPlay などを用いていると、それが原因で動いていない可能性もあるので、
問題を切り分けるためにも、シンプルなものでテストをされた方が良いように思います。


----------------
質問する際は、回答者に具体的な情報を与えてください。

ReyHori
Åê¹ÆNo.32528
投稿日時: 2007-3-17 2:00
新米
居住地: 神奈川県川崎市
投稿: 20
使用環境:
Re: 別HTMLのswfへデータを渡すには
ひろゆきさん、コメントをありがとうございます。

ご指摘の「(あるいは_blankウインドウを開いて)」は言葉足らずでしたが、同一ウインドウへ遷移させる場合と別ウインドウを開きたい場合が混在しているのです。説明不足についてはお詫びします。

ExternalInterface+Javascriptによるご提案、大変ありがたいです。早速検討に加えたいと思います。

これまでに述べた&試した方法の実際は次の通りです(目次:index.html、下層:test.html)

◆(1)の方法
[index.html上のindex.swfのボタンにActionScript]
on (release) {
import flash.external.*;
ExternalInterface.call("fjmp", "test.html?code=001");
}

[index.html上にJavascript]
function fjmp (url) {
location.href = url;
}

[test.html上にJavascript]
document.write ('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="(URL)" width="550" height="100" id="test" align="middle">');

document.write ('<param name="allowScriptAccess" value="always" />');
document.write ('<param name="movie" value="test.swf" />');
document.write ('<param name="quality" value="high" />');
document.write ('<param name="bgcolor" value="#ffffff" />');

document.write ('<param name="FlashVars" value="xid=' + location.search + '" />');

document.write ('<embed src="test.swf" quality="high" bgcolor="#ffffff" width="550" height="100" name="test" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="(URL)" swliveconnect="true" FlashVars="xid=' + location.search + '" />');

document.write ('</object>');

[test.html上のtest.swf上のタイムラインにActionScript]
code = xid.substr (6);
(以下codeを使った処理が続く想定)

◆(2)の方法
[index.html上のindex.swf上のタイムラインにActionScript]
var so:SharedObject = SharedObject.getLocal("code", "/", false);

[index.html上のindex.swf上のボタンにActionScript]
on (release) {
so.data.code = "001";
so.flush();
getURL ("test.html");
}

[test.html上のtest.swf上のタイムラインにActionScript]
var so:SharedObject = SharedObject.getLocal("code", "/", false);
code = so.data.code;
(以下codeを使った処理が続く想定)

 これからご教示戴いた方法をきちんと理解して確かめてみます。ありがとうございました。

ReyHori
Åê¹ÆNo.32539
投稿日時: 2007-3-17 13:13
新米
居住地: 神奈川県川崎市
投稿: 20
使用環境:
Re: 別HTMLのswfへデータを渡すには

遅くなりましたが、ひろゆきさんにご教示戴いた方法をこちらでも理解&確認できました。改めましてお礼申し上げます(本題から外れますが、SWFObjectという強力なツールを知るきっかけにもなりました。重ねてありがとうございます)。

この確認の途中、呼ばれた側でExternalInterfaceを使って自分のlocation.hrefを取得し、そこからクエリストリングを切り出す方法もあることに気付きました。今のところExternalInterfaceを使う方法を第一候補、SharedObjectを使う方法を第二候補として考えているところです。

私情丸出しで恐縮ですが、まだ構造検討の段階のため、選択肢が多いほど良いので「他にもこんな方法もあるよ」というコメントは大歓迎です>皆様。宜しくお願い致します。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops