[JavaScript] 在非 IE 瀏覽器上使用 AC_FL_RunContent 載入 Flash 無法取得物件名稱的解法

Standard

使用 Adobe Dreamweaver 插入 Flash SWF 物件時,會自動加上 AC_RunActiveContent.js 這個檔案,並用 AC_FL_RunContent 方法載入 Flash 內容。

我們想在網頁上藉由 JavaScript 傳遞參數給 SWF,這會用到 Flash 物件的 id 值;在 IE 上都很正常,可以正確地抓到 Flash 物件,可在非 IE 瀏覽器(如 Chrome)卻只會吐 undefined。

找到了下面這篇:
http://stackoverflow.com/questions/2229358/why-cant-i-get-javascript-to-talk-to-actionscript

提到:

AC_FL_RunContent is described in this Adobe technote http://kb2.adobe.com/cps/127/tn_12701.html, which says this:

id (attribute for object, object only)
Movie Identifier. Identifies the Flash movie to the host environment (a web browser, for example) so that it can be referenced using a scripting language.

name (embed only)
Movie name. Identifies the Flash movie to the host environment (a web browser, typically) so that it can be referenced using a scripting language such as JavaScript or VBScript.

id 是給 object tag 用的、name 則是 embed 用的。
用 Chrome 檢查元素去觀察 .. 若僅指定 id,embed 是不會被指定任何物件名稱的 ..
*因為 Chrome 不是用 object 方式載入 Flash 而是 embed。

因此,AC_FL_RunContent 必須同時指定 id 與 name,並利用 JavaScript 判斷是否為 IE 瀏覽器去處理傳回物件名稱的方式,如:
[code language=”javascript”]
function getFlashMovieObject(movieName) {
if (window.document[movieName]) {
return window.document[movieName];
}
if (navigator.appName.indexOf("Microsoft Internet") == -1) {
if (document.embeds && document.embeds[movieName])
return document.embeds[movieName];
}
else {
return document.getElementById(movieName);
}
}
[/code]
ref: http://pro.ctlok.com/2010/06/javascript-actionscript.html

當然也可以不要這麼麻煩,一開始用 SWFObject 就對了 XD

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *