[心得][ js ] Internet Explorer Mobile 上的 …

看板Ajax作者 (烏鴉)時間16年前 (2009/12/02 23:02), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串1/1
上次手殘, 想去色結果弄成刪除.. 現在算是比較有空, 憑印象恢復之前所寫的. 前言是因緣際會下烏鴉有機會在限定 IE mobile 的環境下設計 一個以 html + javascript 能夠做簡單搜尋, 資料呈現的東西. ( 資料量不大, 都放在陣列裡面即可 ) 中間算是跌跌撞撞, 遇到了不少奇怪的問題. 把解決的方法貼在這邊作為參考 @ @/ 問題一:IE mobile 不支援 document.createElement 不很確定後面版本是否支援, 但若您開發程式時候有遇上問題.. 很有可能就是用到沒支援 document.createElement 的版本. 解決的 方案是 使用 innerHTML 去拼湊. 問題二:IE mobile 到底支不支援 document.getElementById ? 一開始烏鴉很天才的想說用: for (var i in document) { //... 可以把 document 支援的東西一次列出來弄清楚, 在電腦上實際也是 可以這麼做的; 不過到了 IE mobile 的環境下.. 它會說謊 = =" getElementById 在烏鴉用的那個版本的 IE mobile 下列舉不出來, 但實際上卻是可用的東西.. (默) 倘若不幸遇到無法使用的版本.. 可以參考使用下面的 getDOMElementById: http://code.google.com/intl/zh-TW/apis/gears/mobile.html /** * Tests if an element is defined. * @param type - The type of the element to be tested. */ function isDefined(type) { return type != 'undefined' && type != 'unknown'; } /** * Retrieve a DOM element by its ID. * @param id - The ID of the element to locate. */ function getDOMElementById(id) { if (isDefined(typeof document.getElementById)) { return document.getElementById(id); } else if (isDefined(typeof document.all)) { return document.all[id]; } else { throw new Error("Can not find a method to locate DOM element."); return null; } } 問題三:PDA 等環境下的字集較少, 電腦上能用的字常常到了 PDA 上的 IE mobile 就不行了, 會不正常結尾. 解決方案: 編碼 後再使用.. 意思是說: var strData = '某些冷僻怪字 '; 的時候, 可能雖然已經在最後面 遇留空格防止引號被吃掉, 但仍有可能因為冷僻字的關係, 其實到了中間就截斷了.. 但資料還是要宣告, 要塞進去變數裡面.. 所以需要編碼後在使用. 好比說 Base64: http://www.webtoolkit.info/javascript-base64.html 或者 encode/decodeURI(Component) 其實應該也是可以的.. 最後要呈現結果的時候再編回去就好了. 問題四:部分時候轉義無效 部分時候 \ 的轉義 (就是 escaping 啦) 會不明的失去效用, \' 類似這樣子的東西在找不到BUG點的時候建議試著換成 ' + "'" + ' 問題五:多媒體播放 (烏鴉只有用到 mp3 所以僅討論播放 mp3) IE mobile 基本上是不能用 embed 的 html tag 的. 要播放, 當時烏鴉是把下面的東西塞在 innerHTML 裡的.. <object classid="6BF52A52-394A-11d3-B153-00C04F79FAA6" type="application/x-oleobject" width="320" height="84"> <param name="url" value="[path]" /> <param name="type" value="audio" /> <param name="AutoStart" value="false" /> </object> 值得注意的是, 塞在 innerHTML 裡面動態產生不同路徑的時候, 使用相對路徑它是抓不到的.. 原因烏鴉不很了解, 但還是有解決方案: 烏鴉是自 location.pathname 去抓絕對路徑啦.. 這樣子就算資料是在記憶卡裡面也能正常播放 .__. 暫時想不起來了, 大致就這樣子吧.. <(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.4.67 ※ 編輯: Crow22312 來自: 114.38.4.67 (12/02 23:04)

12/03 16:54, , 1F
我開始想推廣最舊最嚴苛的html一代來做非ui(本文)部分了.
12/03 16:54, 1F

12/03 21:22, , 2F
樓上,等你喔~啾咪!
12/03 21:22, 2F
最舊最嚴苛的是什麼呀 @口@?! 像烏鴉這種從其他科系殺出來的沒有過完整的歷史體驗就不是很能理解 為什麼要用 innerHTML 處理一切, 支援 createElement 不是很好嗎 @@? 至少速度上會比較快?! ( 因為烏鴉用 greasemonkey 去其他網頁上掛些小框框的時候, 用 innerHTML 直接塞進去的效率明顯比 createElement 來得差很多 ˊˋ ) ※ 編輯: Crow22312 來自: 114.38.4.133 (12/04 07:47)

12/04 09:01, , 3F
A,M,G手機3廠牌的策略我也無法理解,我想只使用最大公因數
12/04 09:01, 3F

12/04 09:05, , 4F
怎麼想還是覺得M牌自己也還沒搞定3 screen in cloud.....
12/04 09:05, 4F

12/04 23:52, , 5F
給原po,我也不懂一樓的推文,應該跟科系無關…
12/04 23:52, 5F

12/04 23:53, , 6F
如果在意,原po可以去 Web_Design概略看一下一樓發的文章。
12/04 23:53, 6F

12/05 16:36, , 7F
嗯.. 需要點時間消化.. 烏鴉真的只會一點點東西.. Orz
12/05 16:36, 7F
文章代碼(AID): #1B5e6Z2l (Ajax)
文章代碼(AID): #1B5e6Z2l (Ajax)