作者Crow22312 (乌鸦)
看板Ajax
标题[心得][ js ] Internet Explorer Mobile 上的 javascript
时间Wed Dec 2 23:02:56 2009
上次手残, 想去色结果弄成删除..
现在算是比较有空, 凭印象恢复之前所写的.
前言是因缘际会下乌鸦有机会在限定 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)
1F:推 zhengyao:我开始想推广最旧最严苛的html一代来做非ui(本文)部分了. 12/03 16:54
2F:→ cassatte:楼上,等你喔~啾咪! 12/03 21:22
最旧最严苛的是什麽呀 @口@?!
像乌鸦这种从其他科系杀出来的没有过完整的历史体验就不是很能理解
为什麽要用 innerHTML 处理一切, 支援 createElement 不是很好吗 @@?
至少速度上会比较快?!
( 因为乌鸦用 greasemonkey 去其他网页上挂些小框框的时候,
用 innerHTML 直接塞进去的效率明显比 createElement 来得差很多 ˊˋ )
※ 编辑: Crow22312 来自: 114.38.4.133 (12/04 07:47)
3F:推 zhengyao:A,M,G手机3厂牌的策略我也无法理解,我想只使用最大公因数 12/04 09:01
4F:→ zhengyao:怎麽想还是觉得M牌自己也还没搞定3 screen in cloud..... 12/04 09:05
5F:→ grence:给原po,我也不懂一楼的推文,应该跟科系无关… 12/04 23:52
6F:→ grence:如果在意,原po可以去 Web_Design概略看一下一楼发的文章。 12/04 23:53
7F:→ Crow22312:嗯.. 需要点时间消化.. 乌鸦真的只会一点点东西.. Orz 12/05 16:36