關於部落格
- 一起墮落吧
  • 71193

    累積人氣

  • 2

    今日人氣

    0

    追蹤人氣

Flash ActionScript call Javascript 在 Form 中錯誤

發生的原因是IE 6 下,Flash解析自己的時候(假設Flash的ID是MyFlash),會直接在DOM裡面找window.MyFlash。但是聰明的IE 6畫出來的DOM,MyFlash其實是在window.Form[n].MyFlash,因此....整組程式就噴掉了..... 在孤狗那邊找半天,很怪,怎麼找都找不到相關的資訊,不曉得是我的關鍵字下的不好還是這個問題只有蠢才在下才會遇到....,總之,在簡體搜尋有找到一篇相關的文章。 哀~~~最近在找孤狗的時候,很多東西在簡體版本找到的資訊,比繁體還多。不曉得是孤狗對繁體文不爽還是各位使用繁體的人種越來越不爭氣了...... Well~~那篇相關的文章中,有提到阿多筆(Adobe)官方的解法,可是咧,我在阿多筆的官網找不到文章中提到的東西(....實在是很想把證據拿給老闆看,不是你的員工豬頭而是.....),所以在這邊提一下官方的解法,如果有好心人士找到該篇文章,請提供一下網址。 官方解法: 1.在Flash寫入後,加進去這條Javascript
window.flashObjectId = document.forms[0].flashObjectId;
2.在Form裡面多放一個空的form
<form id="form1">bra bra bra<form id="form2"></form></form>
第一條解法還滿好理解的,反正找不到就自己定義,但是第二條....感覺很怪,這樣就能解決解析上的錯誤??因為第2條是要改原本的html,所以直接放棄(除非他是唯一解)。 好吧,我們針對第一條來下手,大部分的普羅大眾第一條的方式應該可以解決這個錯誤。但總是有些怪咖,id是用變數的......所以針對第一條做一些修改:
if(typeof(eval('window.' + flashObjectId)) == 'undefinded' && typeof(window.getElementById(flashObjectId)) != 'undefinded'){ eval('window.' + flashObjectId + ' = window.document.getElementById('' + flashObjectId + '')'); }
因為flashObjectId是變數,所以要用eval的方式去轉換。另外為何if的陳述式要整條用eval?而不是eval('window.' + flashObjectId) = windo....?因為...你踹踹看就知道了...... 還發現一個解法:
var flashObjectId = window.getElementById('flashObjectId');
var一個flashObjectId的全域變數,然後把Flash指給這個變數就ok囉~~ 當然的,如果是狂人型的,可能會override DOM的解析吧....至於override的方式就留給狂人自己寫。 好啦~~~form的問題就這樣解決囉~~~ 目前測試了Firefox 2.0.0.14、IE 6.0.3790.3959還有IE 7.0.5730.13三款,發現只有在IE 6.0上面會有這個狀況,在IE 7.0上面似乎已經修正了DOM的解析方式。如果你的flash確定不會給IE 6.0吃到,那就不用這麼大費周張囉。
相簿設定
標籤設定
相簿狀態