犯了不易察覺的錯誤:

使用 innerHTML 動態產生 flash 物件(object / embed)然後插入頁面,影片裡用 ExternalInterface.addCallback(ActionScript 3.0)公開給 JavaScript 的函數,在 ie 6 上會找不到。

問題點在以下片段:

var obj = document.createElement('div');
obj.innerHTML = '<object (略…)><embed (略…) /></object>';
document.body.appendChild(obj);

想重現的話,我寫了簡單的原始檔放在這裡(DivShare),別忘了要用 ie 開才能得到最佳瀏覽效果。

解決辦法是把 innerHTML 那行寫在最後,變成:

var obj = document.createElement('div');
document.body.appendChild(obj);
obj.innerHTML = '<object (略…)><embed (略…) /></object>';

結論,在 DOM 元素實際被加進頁面之前,ExternalInterface 不是不會生效(前面沒提到,ExternalInterface.call 會在 appendChild 之前就 call 了……),但是 ExternalInterface.addCallback 會碰到未知的問題。