Flex (ActionScript) 通過 ExternalInterface.call 調用頁面 JS 函數 report(lon, lat) 傳遞經緯度,結果拋出 Error #1032: Stack Overflow。若去掉參數僅調用 report() 則正常。
ActionScript 與 JavaScript 類型映射失敗。lon、lat 在 AS 端可能是 Number、int 或自定義類,序列化為 JSON 時產生循環引用或超大對象,導致 JS 引擎遞歸解析爆棧。
if (ExternalInterface.available) {
try {
// 強制轉為字符串,繞過複雜對象序列化
ExternalInterface.call("report", String(lon), String(lat));
// 或模板字面量:`${lon}`, `${lat}`
} catch (e:Error) {
trace("JS 呼叫失敗: " + e.message);
}
}
function report(lonStr, latStr) {
// 再次轉數值,業務邏輯用 Number
const lon = parseFloat(lonStr);
const lat = parseFloat(latStr);
if (isNaN(lon) || isNaN(lat)) return;
console.log(`收到坐標: ${lon}, ${lat}`);
// 後續地圖標註等邏輯
}
JSON.stringify 後傳字符串,JS 端 JSON.parse 還原。ExternalInterface 實際發送的內容。// AS 註冊回調供 JS 主動調用
ExternalInterface.addCallback("flexReady", onFlexReady);
function onFlexReady():void {
ExternalInterface.call("onFlexLoaded"); // 通知頁面 Flex 就緒
}
參考 CSDN 討論:ExternalInterface 參數傳遞完整避坑