Flash 與 JavaScript 的互動主要透過 ExternalInterface API 實現。這個 API 允許 Flash 和 JavaScript 相互呼叫函式和傳遞資料。 雖然 Flash 現在已經基本被淘汰,但在一些老舊專案中可能仍然會遇到。
以下是 Flash 與 JavaScript 互動的兩種主要方式:
1. Flash 呼叫 JavaScript:
在 ActionScript 3.0 中,使用 ExternalInterface.call()
方法呼叫 JavaScript 函式。
// ActionScript 3.0
import flash.external.ExternalInterface;
// 檢查 JavaScript 是否可用
if (ExternalInterface.available) {
// 呼叫名為 "jsFunction" 的 JavaScript 函式,並傳遞兩個引數
ExternalInterface.call("jsFunction", "parameter1", 123);
}
在 HTML 中,定義對應的 JavaScript 函式:
// JavaScript
function jsFunction(param1, param2) {
console.log("Flash called jsFunction with:", param1, param2);
// 在這裡執行 JavaScript 程式碼,例如更新頁面元素
document.getElementById("myDiv").innerHTML = param1 + " " + param2;
}
2. JavaScript 呼叫 Flash:
在 JavaScript 中,可以使用 Flash 物件的 GetVariable()
和 SetVariable()
方法(對於較老的 Flash 版本)或 call()
方法(對於 ActionScript 3.0)來呼叫 Flash 函式。
- 對於 ActionScript 3.0:
// JavaScript
// 獲取 Flash 物件,"myFlashMovie" 是 Flash 物件的 ID
var flashMovie = document.getElementById("myFlashMovie");
// 呼叫 Flash 中名為 "asFunction" 的函式,並傳遞一個引數
if (flashMovie && flashMovie.call) { // 檢查方法是否存在
flashMovie.call("asFunction", "parameterFromJS");
}
在 ActionScript 3.0 中,定義對應的 Flash 函式:
// ActionScript 3.0
public function asFunction(param:String):void {
trace("JavaScript called asFunction with: " + param);
// 在這裡執行 ActionScript 程式碼
}
- 對於 ActionScript 2.0 (舊版本,不推薦): 需要在 Flash 中使用
ExternalInterface.addCallback()
註冊可被 JavaScript 呼叫的函式。
// ActionScript 2.0
ExternalInterface.addCallback("asFunction", this, myASFunction);
function myASFunction(param:String):Void {
trace("JavaScript called myASFunction with: " + param);
}
然後在 JavaScript 中,可以使用:
// JavaScript
var flashMovie = document.getElementById("myFlashMovie");
flashMovie.asFunction("parameterFromJS"); // 直接呼叫已註冊的函式
關鍵點:
ExternalInterface.available
: 在 ActionScript 中使用此屬性檢查 JavaScript 是否可用以及通訊是否可能。- Flash 物件 ID: 確保正確獲取 Flash 物件的 ID,以便 JavaScript 可以與之互動。
- 資料型別: 注意 Flash 和 JavaScript 之間傳遞的資料型別。 儘量使用基本資料型別(字串、數字、布林值)以避免出現問題。
- 安全性: ExternalInterface 有一些安全限制,尤其是在涉及跨域通訊時。 確保 Flash 和 HTML 檔案位於同一域中,或者正確配置跨域策略檔案。
由於 Flash 已經被淘汰,建議儘量避免使用 Flash,並使用現代 Web 技術,例如 HTML5、Canvas、WebGL 和 JavaScript 來實現相同的功能。 如果必須維護舊的 Flash 專案,請注意以上互動方法和安全注意事項。