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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     swfaddress2.1のgetValueでURLを取得出来ていない
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
onmali
Åê¹ÆNo.39857
投稿日時: 2008-8-9 17:12
新米
居住地:
投稿: 5
使用環境:
WinVista,FlashCS3
swfaddress2.1のgetValueでURLを取得出来ていない
環境:WinXP(sp2), FlashCS3, AS3, IE6, Firefox2, swfobject2.1

初めてswfaddress(2.1)を使ってみています。
ブラウザのアドレスバーに"http://www.myDomain.jp/#/pageA"と入力しても指定のコンテンツが表示されません。
ページ読み込み時にgetValue()の値を出力すると"/"となっています。
ドキュメントクラスのコンストラクタから最初に呼ばれるinit関数内で下記のようにgetValue()していますが、onSWFAddress()内で確認しても同じです。
private function init():void {
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, onSWFAddress);
var s = SWFAddress.getValue();
dTxt.text = s;
}
setValue()はちゃんと出来ていて、アドレスバーに付加されて"http://www.myDomain.jp/#/pageA"のようになっていますし、その後のgetValue()は"/pageA"など取得していますので、アドレスバーにある文字列を取得出来ていないのかなぁと思います。
対処法をご存知の方おられましたら是非よろしくお願いします。
961832p
Åê¹ÆNo.39941
投稿日時: 2008-8-18 3:14
常連
居住地: Akiruno-shi
投稿: 155
使用環境:
 
:AS3:
- Adobe Flex SDK, Eclipse, AIR GEAR
- LB.Log AS3, Alcon2

:AS2:
- AMES(ASDT, MTASC, Eclipse, swfmill)
- Natural Entry Point Method
- LB.Log, Zeroi

Pro, Firefox, Chromium(Iron), IE

----------------
Pro,
Re: swfaddress2.1のgetValueでURLを取得出来ていない
自分も今までSWFAddress2.0を使用していましたが、今回いい機会だったので2.1を試してみることに。
2.0と書式が違っていたので付属のサンプルを元に、getValue関数を複数箇所で呼んで戻値を確認するだけのものです。

自分の環境が結構違う(AS2、AMES)ので参考にならないかもしれません。

(Application.as)

 1: import com.asual.SWFAddress;
 2: import com.asual.SWFAddressEvent;
 3: //====================================================================//
 4: class Application extends MovieClip{
 5:     //----------------------------------------------------------------//
 6:     function Application() {
 7:         var self : MovieClip = this;
 8:         trace("i Application: " + SWFAddress.getValue());
 9:     }
10:     //----------------------------------------------------------------//
11:     function onLoad() {
12:         var self : MovieClip = this;
13:         trace("i Application.onLoad: " + SWFAddress.getValue());
14:         //
15:         SWFAddress.addEventListener(SWFAddressEvent.CHANGE,
                delegate(handleChange, self));
16:     }
17:     //----------------------------------------------------------------//
18:     function handleChange(e : SWFAddressEvent) : Void{
19:         var self : MovieClip = this;
20:         trace("i SWFAddress.onChange: " + SWFAddress.getValue());
21:     }
22:     //----------------------------------------------------------------//
23:     function delegate(f : Function, o : Object) : Function{
24:         return function () {
25:             var p = [this];
26:             if (arguments.length) p = p.concat(arguments);
27:             f.apply(o, p);
28:         }
29:     }
30: }

●おこなった動作(番号が若いものから順に実行):
1.WebブラウザのキャッシュをクリアしてURL(http://foo.bar/#/HOGE/)をアドレスバーへ入力
2.URL(http://foo.bar/#/PIYO/)を入力
3.Webブラウザの新規ウインドウ、もしくは新規タブにURL(http://foo.bar/#/PIYO/)を入力

●各trace関数の結果:
(IE6)
1.8行目→ / 13行目→ / 20行目→ /HOGE/
2.8行目→ / 13行目→ / 20行目→ /PIYO/
3.8行目→ / 13行目→ / 20行目→ /PIYO/

(FF3)
1.8行目→ /     13行目→ /     20行目→ /HOGE/
2.8行目→ (来ない) 13行目→ (来ない) 20行目→ /PIYO/
3.8行目→ /     13行目→ /     20行目→ /PIYO/

(TheWorld Browser 2.2、Grani 3.2)
1.8行目→ / 13行目→ / 20行目→ /HOGE/
2.8行目→ / 13行目→ / 20行目→ /
3.8行目→ / 13行目→ / 20行目→ /PIYO/

と、自分の環境下ではWebブラウザによって挙動が違いました。
試したブラウザの種類は少ないですが、結果を見る限りgetValue関数はCHANGEイベント内で呼んだほうがいいのかな、と感じました。

(おそらく)IEコンポーネントを使っているタブブラウザでは、CHANGEイベント内で取得できない時もあったのが気になりました。
これはキャッシュをクリアするか、クリアしなくても新規タブで開くと取得するようになるのですが。
もしかしたらSWFAddressがstatic変数を使用していることに関係があるのかもしれません(以前、同じような挙動に遭遇したことがあるので)。

はじめにも書きましたが、これは自分の環境のみでの挙動かもしれません。

[2008-08-23: 追記]

上記プログラム(Application.as)の7行目と8行目の間に
SWFAddress.setStrict(false); //デフォルトではtrue
を入れてみたところ、各trace関数の結果は次のようになりました。
(IE6、FF3)
以前と同じ

(TheWorld Browser 2.2、Grani 3.2)
1.8行目→ /   13行目→ /   20行目→ /HOGE/
2.8行目→ (空) 13行目→ (空) 20行目→ (空)
3.8行目→ /   13行目→ /   20行目→ /PIYO/


----------------
:961832p:
- だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー

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

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