SWFAddress の Safari3での問題

Safari 3 Betaで、SWFAddress.setValue('hoge') を実行した際、隠し form { action = #hoge, method = get } をsubmitして、履歴を追加するため、URLに ? が付いていない場合、ファイル名の最後に ? を追加され、HTML はリフレッシュされ、SWF は振り出しに戻ります。

再現したバージョン

javascript:alert(asual.util.Browser.version)

ブラウザ 結果 再現 navigator.userAgent
Safari3.0.3 522.12 Mozilla/5.0 (Macintosh; U; Intel Mac OS X; ja-jp)
AppleWebKit/522.11.1 (KHTML, like Gecko)
Version/3.0.3
Safari/522.12.1
Shiira2.2 125 Mozilla/5.0 (Macintosh; U; Intel Mac OS X; ja-jp)
AppleWebKit/522.11.1 (KHTML, like Gecko)
Shiira
Safari/125
Safari3.0.3(Windows) 522.15.5 Mozilla/5.0 (Windows; U; Windows NT 5.1; ja)
AppleWebKit/522.15.5 (KHTML, like Gecko)
Version/3.0.3
Safari/522.15.5

参照: Safariのバージョンを判別する


それを回避するために、以下の記述をします。

以下はそれを回避するための方法のドラフトです。

var l = document.location.toString();
var b = asual.util.Browser;

if(b.safari&&l.indexOf("?")==-1)
  document.location.href = l.indexOf("#")>=0 ? l.split("#").join("?#") : (l + "?");

else {
  var so = new SWFObject("hoge.swf", "hoge", "100%", "100%", 8, "#FFFFFF");
  // ...
  so.write("flashcontent");
}

hoge.html#permalinkにアクセスした際、SWFを表示せず、hoge.html?#permalinkに強制的に遷移させます。

SWFAddress について

参考リンク

使い方: ActionScript 2

import SWFAddress;
class Hoge extends MovieClip {
  static var ins:Hoge;
  public var btn1:MovieClip, btn2:MovieClip, btn3:MovieClip, btn4:MovieClip;

  public function Hoge():Void {
    ins = this;
    SWFAddress.onChange = function() {
      var i:String = SWFAddress.getPath();
      Hoge.ins._setContent(i);
    }
    onLoad = init;
  }

  private function init():Void {
    var ar:Array = ["content1", "content2", "content3", "content4"];
    var bt:Array = [btn1, btn2, btn3, btn4];
    for(var i:String in bt) {
      bt[i].contentName = ar[i];
      bt[i].onRelease = function() { Hoge.ins.setContent(this.contentName); }
    }
  }

  public function setContent(i:String):Void {
     SWFAddress.setValue(i);
  }

  public function _setContent(i:String):Void {
     SWFAddress.setTitle(i);
    //do something
  }

}
comments powered by Disqus