[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 瀏覽器去處理傳回物件名稱的方式,如:

	    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);
	        }
	    }

ref: http://pro.ctlok.com/2010/06/javascript-actionscript.html

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

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

你可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>