flash如何與js互動?

王铁柱6發表於2024-12-06

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 專案,請注意以上互動方法和安全注意事項。

相關文章