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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   とにかくFLASH【FLASHに関して全般】
     動きますが不安です[SWFAddress+Firefox+クロスドメイン]
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
961832p
Åê¹ÆNo.40462
投稿日時: 2008-10-8 18:30
常連
居住地: 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,
動きますが不安です[SWFAddress+Firefox+クロスドメイン]
 
質問とは少し違うのですが、SWFAddressを使っているSWFファイルがありまして、これを別ドメインにあるHTMLファイルからアクセスした時、SWFAddress.setValue関数が効かないという問題に直面しました。
効かないといっても全くではなく、setValue後におこるchangeイベントは発生しています。しかし、ブラウザのロケーションバー(URLが表示される部分)が変化しません。

しかもIEとFirefoxではFirefoxだけにこの問題がおき、IEの時や各ファイルが同じドメイン上にあれば問題ありません。
ここが変化しないと、ブックマークやヒストリーバックが使えないので悩みました。
アドオンなしのFirefoxで見たり、SWFAddressのバージョンを変える、緩いポリシーファイルを置いてみたりしましたが解決されず、もしやと思い、最近始めだしたAS3で試してみるも結果は同じです。

SWFAddressのソースを見ると、setValue関数はExternalInterfaceを使用していたので、それ絡みで検索してみると参考になるページを見つけ、最終的にはFlashのallowDomain関数を使用することにより大丈夫になりました。

ExternalInterface@FireFox - フォーラム - Flex User Group
ExternalInterfaceとかの落とし穴まとめ - 0-9

しかし、たまたま自分の環境で動いているだけかもしれないのでは?という思いがあり、なんというか…とても不安です(苦笑)。また、Firefoxだけというのも気になります。

実際にテストで使っていたページを置きましたので、もし時間が空いておられるかたに確認して頂けたらと思い、投稿しました(すみませんが、リンク先は無料サーバなので上部に広告が出てしまいます)。
なお、FlashPlayerが9.0.124.0以上でないと更新画面になります(これは下げたほうがいいでしょうか?)。

自環境でテストしたブラウザ(すべてWindowsXP)

 IE: IE7、IE6、Sleipnir2、Grani、TheWorldBrowser
 FF: Firefox3、Firefox2

問題ないのを○、ロケーションバーに反映されないのを×としました。

・[IE:○ FF:○] AS2版、SWFファイルを同じドメインから
・[IE:○ FF:○] AS3版、SWFファイルを同じドメインから

・[IE:○ FF:×] AS2版、SWFファイルを別のドメインから
・[IE:○ FF:×] AS3版、SWFファイルを別のドメインから

・[IE:○ FF:○] AS2版、SWFファイルを別のドメインから(allowDomain関数使用)
・[IE:○ FF:○] AS3版、SWFファイルを別のドメインから(allowDomain関数使用)ログビューワ(ログ出力関数の結果を表示)

以下はActionScriptの各ソースです。

(AS2のソースコード)

import mx.managers.DepthManager;
import mx.controls.Button;
import com.asual. * ;
//====================================================================//
class Main extends MovieClip{
    //----------------------------------------------------------------//
    function Main() {
        var self : MovieClip = this;
        trace("i Main");
        //
        System.security.allowDomain("vraihmfx.s267.xrea.com");
    }
    //----------------------------------------------------------------//
    function onLoad() {
        var self : MovieClip = this;
        trace("i complete");
        //URL変更時やsetValue時に呼ばれる
        SWFAddress.onChange = function () {
            trace("i swfaddr_change");
            trace("d getValue:" + SWFAddress.getValue());
        };
        //Buttonをクリック時に呼ばれる
        var buttonListener : Object = new Object();
        buttonListener.click = function (a_event : Object) {
            trace("i button_click");
            trace("d label:" + a_event.target.label);
            SWFAddress.setValue(a_event.target.label);//URL変更
            SWFAddress.setTitle(a_event.target.label);//タイトル変更
        };
        //Buttonを縦に並べて表示
        var button_list : Array = ["HOGE", "FUGA", "PIYO"];
        var button_height : Number = Math.floor(Stage.height / button_list.length);
        var button_margin : Number = 8;
        for (var i : Number = 0; i < button_list.length; i++) {
            var btn : Button = self.createClassChildAtDepth(Button, DepthManager.kTop, {
                label : button_list[i]
            });
            btn.move(button_margin + 0, button_margin + button_height * i);
            btn.setSize(Stage.width - button_margin * 2, button_height - button_margin * 2);
            btn.addEventListener("click", buttonListener);
        }
    }
}

(AS3のソースコード)

package{
    import flash.display. * ;
    import flash.events. * ;
    import flash.system. * ;
    import mx.core. * ;
    import mx.events. * ;
    import mx.controls. * ;
    import com.luminicbox.log. * ;
    import com.asual.swfaddress. * ;
    import my. * ;
    //========================================================================//
    public class Main extends Application{
        private var _logger : Logger;
        //--------------------------------------------------------------------//
        public function Main() {
            super();
            DefaultComponent.stylesInit();
            //ログ出力の準備
            _logger = new Logger("test_swfaddr_as3");
            var cp : ConsolePublisher = new ConsolePublisher();
            _logger.addPublisher(cp);
            //
            Security.allowDomain("vraihmfx.s267.xrea.com");
            //
            var self : Application = this;
            _logger.info("Main");
            //Applicationの設定
            self.layout = "absolute";
            self.styleName = "plain";
            self.setStyle("backgroundColor", 0xDEE2E2);
            self.addEventListener(FlexEvent.APPLICATION_COMPLETE, app_complete);
        }
        //--------------------------------------------------------------------//
        private function app_complete(a_event : FlexEvent) : void{
            var self : Application = this;
            _logger.info("complete");
            //SWFAddressイベントの設定
            SWFAddress.onChange = swfaddr_change;
            //Buttonを縦に並べて表示
            var button_list : Array = ["HOGE", "FUGA", "PIYO"];
            var button_height : int = Math.floor(self.stage.height / button_list.length);
            var button_margin : int = 8;
            for (var i : int = 0; i < button_list.length; i++) {
                var btn : Button = new Button();
                btn.label = button_list[i];
                btn.x = button_margin + 0;
                btn.y = button_margin + button_height * i;
                btn.width = self.stage.width - button_margin * 2;
                btn.height = button_height - button_margin * 2;
                btn.addEventListener(MouseEvent.CLICK, button_click, false, 0, true);
                self.addChild(btn);
            }
        }
        //--------------------------------------------------------------------//
        //Buttonをクリック時に呼ばれる
        private function button_click(a_event : Event) : void{
            _logger.info("button_click");
            _logger.debug("label:" + a_event.target.label);
            SWFAddress.setValue(a_event.target.label);//URL変更
            SWFAddress.setTitle(a_event.target.label);//タイトル変更
        }
        //--------------------------------------------------------------------//
        //URL変更時やsetValue時に呼ばれる
        private function swfaddr_change() : void{
            _logger.info("swfaddr_change");
            _logger.debug("getValue:" + SWFAddress.getValue());
        }
    }
}


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

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

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