網頁錨點(Named Anchor)造成 Flash Preloader 失效問題
看到討論 從 SWFAddress 找到的詭異的bug
大意是說當網址有出現指向錨點的 URL (Ex: index.html#anchor) 會造成該頁內 SWF Preloader 失效
真是很有意思的發現~
先稍微找一下 Google,似乎沒有相關的文章
於是自己寫測試程式
開一空白文件 (AS 2.0)
建立四個關鍵影格
前三影格設立影格標籤,分別為 A、B、C (Label Type: Name or Anchor)
在 A、B、C 三個影格加入靜態文字,分別標示 Fame Label A、B、C,與一個動態文字欄位,變數名稱為 precent
在 A、B、C 三個影格都加上以下程式:
this.onEnterFrame = function():Void {
percent = Math.floor(getBytesLoaded() / getBytesTotal() * 10000) / 100 + "%";
};
trace("_currentFrame : " + _currentFrame);
stop();
在第四個影格放入一張大圖用以突顯 Preloader 效果
將輸出的 SWF 與相關的 HTML、JS 部署到 Local Apache 上進行測試
使用 Fx 與 Charles 模擬網路頻寬
分別用以下網址進行測試
http://localhost/AnchorTest/AnchorTest.html
http://localhost/AnchorTest/AnchorTest.html#A
http://localhost/AnchorTest/AnchorTest.html#B
http://localhost/AnchorTest/AnchorTest.html#C
http://localhost/AnchorTest/AnchorTest.html#
http://localhost/AnchorTest/AnchorTest.html#UndefinedAnchor
Flash Player Plugin 是具有偵測 HTML Acnhor 的功能的
不過功能太陽春,所以才會有 SWFAddress 這類東西出現
經過測試發現,Label Type 甚至不需要選擇 Anchor,HTML 輸出設定也不用改
Flash Player Plugin 就會對 URL Anchor 有所反應
這未免也太自動了一些
Flash Player Plugin 對於 Anchor 的撥放行為比較特殊
它會一邊下載一邊搜尋是否有對應的 Frame Label
並不會馬上立即進行撥放,直到找到對應的 Frame Label
或是整個 SWF 下載完仍找不到,才會開始撥放
所以當遇到了像這樣的錨點 AnchorTest.html#
Flash 撥放器根本不可能在 SWF 內找到空字串 "" 的影格標籤
也沒有辦法在 Flash IDE 內設置這樣的標籤 ""
不過我們可以使用 UltraEdit 修改 SWF
找到 Frame Label A 之後
將 A 改為 0x00
再次使用 AnchorTest.html# 進行測試
就會發現 Preloader 可以正常執行了
這或許不算是一個 Bug
而是 Flash Anchor 功能延伸出來的行為
不過誰會想得到呢?
或許 Adobe 應該要提供取消 Flash Anchor 功能的方式


