成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript與ActionScript 3.0交互的一些問題

開發(fā) 后端 前端
做基于 Flash9(ActionScript 3.0)的 JavaScript PHPRPC 3.0 客戶端時(shí)遇到了一些 JavaScript 與 ActionScript 3.0 交互的一些問題,這些問題在網(wǎng)上基本上都沒有找到答案,最后通過不斷的嘗試才得以解決,因此在這里總結(jié)出來,希望能給遇到同樣問題的同志們一些幫助。

JavaScript 跟 ActionScript 3.0 交互也是通過 flash.external.ExternalInterface 這個(gè)類,不過與跟 Flash 8 中跟 ActionScript 2.0 交互所使用的 flash.external.ExternalInterface 還是有所不同的。***的不同就是 ExternalInterface.addCallback 方法在 ActionScript 3.0 中只有 2 個(gè)參數(shù)了,而不再有 instance 這個(gè)參數(shù)。下面要討論的這些問題都是關(guān)于 Flash 9 中 ActionScript 3.0 的。

先來說最常遇到的問題,就是在 JavaScript 調(diào)用 Flash 中的 ActionScript 方法時(shí)報(bào)告該方法不存在。這個(gè)問題是跟 Flash 中執(zhí)行 ExternalInterface.addCallback 的時(shí)間有關(guān)的,ExternalInterface.addCallback 必須要在 HTML 的完全載入之后也就是 window.onload 事件執(zhí)行后才可以執(zhí)行,否則,它所發(fā)布的方法都無法在 JavaScript 中調(diào)用。

解決這個(gè)問題的方法在 Flash 9 的 ActionScript 3.0 幫助中有個(gè)例子,里面包含了這個(gè)解決方法,就是首先在 js 中設(shè)置兩個(gè)標(biāo)志,例如 jsReady 和 swfReady 這兩個(gè)變量作為標(biāo)志,開始都設(shè)置為 false,當(dāng) window.onload 時(shí),設(shè)置 jsReady 為 true,在 Flash 中一開始檢查 JavaScript 中的這個(gè) jsReady 標(biāo)志是否是 true(通過 ExternalInterface.call 方法調(diào)用 JavaScript 中的返回這個(gè)標(biāo)志的一個(gè)函數(shù)),如果不為 true,就設(shè)置一個(gè)定時(shí)器,經(jīng)過一段時(shí)間后(例如 50 或 100 毫秒)重復(fù)這個(gè)檢查這個(gè)標(biāo)志,一旦為 true,則執(zhí)行 ExternalInterface.addCallback 來發(fā)布 ActionScript 要提供給 JavaScript 調(diào)用的函數(shù)或方法,執(zhí)行完所有的 ExternalInterface.addCallback 后,通過 ExternalInterface.call 方法調(diào)用 JavaScript 中的設(shè)置 swfReady 標(biāo)志的函數(shù)設(shè)置 swfReady 為 true。之后,當(dāng) JavaScript 檢測(cè)到 swfReady 為 true 后,再調(diào)用 ActionScript 中的方法就不會(huì)遇到上的說的這個(gè)問題了。

如果簡(jiǎn)單一點(diǎn)的調(diào)用這樣還可以,如果是有好多這樣的調(diào)用就比較麻煩了。我是通過建立兩個(gè)執(zhí)行隊(duì)列:jsTaskQueue 和 swfTaskQueue,當(dāng)在 jsReady 為 true 之前,如果有要調(diào)用 ActionScript 的操作,就把這個(gè)操作放到 jsTaskQueue 中,當(dāng) js 在 window.onload 中執(zhí)行設(shè)置 jsReady 時(shí),把這個(gè)隊(duì)列中的任務(wù)取出來執(zhí)行,當(dāng) jsReady 為 true 后 swfReady 為 true 之前,如果有要調(diào)用 ActionScript 的操作,就把這個(gè)操作放到 swfTaskQueue 中,當(dāng) ActionScript 通過 ExternalInterface.call 方法調(diào)用 JavaScript 中的設(shè)置 swfReady 標(biāo)志的函數(shù)設(shè)置 swfReady 為 true 時(shí),把這個(gè)隊(duì)列中的任務(wù)取出來執(zhí)行。當(dāng) jsReady 和 swfReady 都為 true 時(shí),那么如果有要調(diào)用 ActionScript 的操作,直接運(yùn)行就可以了。通過這種方法把這些任務(wù)封裝后,使用這些封裝之后的操作,在編寫代碼就可以按照順序(而不是異步)來寫了,執(zhí)行時(shí)也是順序執(zhí)行啦。

除了這個(gè)最常遇到的問題之外,還有兩個(gè)關(guān)于 IE 上的問題。

如果你是通過 JavaScript 動(dòng)態(tài)創(chuàng)建的 Flash 標(biāo)簽然后插入到 html 中的話(例如通過 innerHTML 賦值的方法或者 appendChild 的方法),很可能你這個(gè)操作是在 window.onload 之后才進(jìn)行,在這種情況下,其它瀏覽器可以正常進(jìn)行 JavaScript 和 ActionScript 3.0 的交互,IE 就不行。所以,為了保險(xiǎn),***的方法就是直接把 flash 標(biāo)簽的 html 寫在 html 的 body 中,或者用 JavaScript 的 document.write 來寫入 html 的 body 中,后面這種方法對(duì)于 IE 來說更合適一些,因?yàn)檫@樣的話,可以不需要點(diǎn)擊激活 Flash。

另一個(gè)問題是,不要在 ActionScript 中發(fā)布名字為 invoke 的方法,否則在 IE 中,JavaScript 調(diào)用該方法時(shí)會(huì)出錯(cuò)。

***一個(gè)問題,網(wǎng)上可以查到的比較多了,就是不要把 flash 放到 form 中,否則在 IE 中,JavaScript 調(diào)用 ActionScript 時(shí)會(huì)出錯(cuò)。當(dāng)然,網(wǎng)上也給出了一個(gè)解決這個(gè)問題的腳本,不過那個(gè)貌似是針對(duì) Flash 8 的 ActionScript 2.0 的,我沒有試過,不知道對(duì) ActionScript 3.0 是否同樣有效。

如果在 ActionScript 中通過 ExternalInterface.call 調(diào)用 JavaScript 時(shí),如果傳遞的參數(shù)有字符串,那么字符串中如果包含 \ 符號(hào)的話,那么將會(huì)調(diào)用失敗。這個(gè)也是 ActionScript 和 JavaScript 交互的一個(gè) bug,解決辦法是,對(duì)傳遞的字符串先進(jìn)行一下處理在傳遞,處理方法很簡(jiǎn)單,比如要傳遞的數(shù)據(jù)是 data,將它進(jìn)行一次 data.replace(/\\/, “\\\\”) 替換之后,在傳遞給 JavaScript 就可以了。

【編輯推薦】

  1. JavaOne 2009第三天:微軟與Sun/Oracle攜手并進(jìn)
  2. 開發(fā)高可移植性J2ME的軟件
  3. Java虛擬機(jī)(JVM)中的內(nèi)存設(shè)置詳解
  4. 6月編程語(yǔ)言排行榜:JavaScript轉(zhuǎn)正在即
  5. 不唐突的JavaScript的七條準(zhǔn)則
責(zé)任編輯:王觀 來源: 動(dòng)態(tài)網(wǎng)站制作指南
相關(guān)推薦

2016-10-18 22:10:02

HTTP推送HTML

2009-06-18 15:14:53

Spring osgi

2011-03-08 14:28:03

proftpdGentoo

2018-06-12 15:39:41

容器部署云平臺(tái)

2009-06-12 10:25:42

Webservices

2022-01-16 08:04:44

集群部署canal

2010-09-17 15:41:46

網(wǎng)絡(luò)協(xié)議分析軟件

2012-12-19 11:40:13

思科路由器

2010-05-04 15:59:05

Oracle字符集

2009-08-06 16:01:30

C#接口成員

2009-11-30 16:19:47

VS調(diào)試問題

2009-11-23 13:44:33

PHP5面向?qū)ο?/a>

2011-01-26 16:24:53

Sun甲骨文

2021-10-21 06:52:17

Vue3組件 API

2011-11-01 09:29:08

Android 4.0

2012-04-25 22:45:46

2009-11-30 13:51:28

VS2003 Runt

2011-05-31 17:50:07

白盒測(cè)試

2009-07-21 10:35:18

margin coll

2009-10-10 08:36:18

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 福利网址 | 欧美乱操 | 亚洲精品视频二区 | 伊人免费网 | av毛片| 亚洲欧美在线一区 | 日本不卡一区 | 亚洲一区二区在线播放 | 国产亚洲欧美在线视频 | 亚洲第一黄色网 | 国产99久久久国产精品下药 | 国产精品无码久久久久 | 在线区 | 欧美精品99| 婷婷五月色综合香五月 | 亚洲午夜av久久乱码 | 欧美视频网 | av网站免费观看 | 精品国产一区二区在线 | 国产视频中文字幕 | 欧美一区二 | 91精品国产91久久久久久最新 | 亚洲一区视频在线 | 久久精彩视频 | 日日做夜夜爽毛片麻豆 | 中文字幕高清 | 国产一区二区三区四区 | 一区二区在线 | 亚洲欧美日韩一区 | 国产精品91视频 | 91人人爽 | 国产精品不卡一区 | 欧美日韩精品一区 | 日本午夜一区二区三区 | 精品免费国产一区二区三区 | 日韩精品在线免费观看视频 | 欧美a级成人淫片免费看 | 99久久精品免费看国产高清 | 欧美精品网站 | 天天天天操 | 武道仙尊动漫在线观看 |