never-online 's Tech Blog In CSDN

never online - Everlasting love for angela.

rank liuID:BlueDestiny
148282次访问,排名486好友17人,关注者28
这个家伙很懒, 没有留言作案的证据...
另,貌似我的资料被CSDN出卖了...
BlueDestiny的文章
原创 114 篇
翻译 0 篇
转载 8 篇
评论 223 篇
never-online的公告
Web:
www.never-online.net
Email:
BlueDestiny##126.com
QQ:
77091373
最近评论
ibsrvk:wow power leveling
zyhomepage:支持一下
clicksun:如果要制作纯CSS+DIV的圆角方框图形,可以到这里直接在线制作,什么颜色都可以:http://corner.cha.la
C_SuperMe:可以好好学习一下啊!!
lrh165:我也是拷贝了你的代码,但是内容无法显示,能否给点帮助,谢了先!
lrh165@163.com
文章分类
收藏
相册
icon
JS & DHTML
Dhteumeuleu
Douglas Crockford
Webfx
常去之地
ASP.Net
MSDN英文
XML指南
XML的大本营
博客园
正则表达式
我的网站
我网站的Blog(RSS)
友情链接
KimSoft的blog(RSS)
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 Javascript-Mozilla和IE中的一个函数直接量的问题收藏

新一篇: O'Relly《CSS权威指南》(PDF) 下载 | 旧一篇: Javascript-文字动画,兼容Mozilla

我在这里写这个也是写点在做js时遇到的问题,当个笔记.没有想到被hax "批"了一顿,不过也是说得有些道理的.毕竟这个内容也不痛不痒的

一般情况下,我们在JS中用函数直接量来命名一个简单的函数。

<script type="text/javascript">
var func=function(s){window.alert(s)};
func("never-online")
</script>

这在IE或者Mozilla中也是合法的(ECMA标准中有函数直接量的定义)。

但是IE中还有另外一种更简单的命名方式可以简化我们的代码:
<div id="demo">http://blog.never-online.net</div>
<script type="text/javascript">
var $=document.getElementById;
alert($("demo").innerHTML);
</script>

而这在Mozilla中没有报语法错误,而是抛出了一个异常, 操作符非法:
下面代码是捕获Mozilla抛出的异常并打印出来
<div id="demo">http://blog.never-online.net</div>
<script type="text/javascript">
var $=document.getElementById;
try {
alert($("demo").innerHTML);
} catch(ex) { document.write(ex)}
</script>


异常内容为:
[Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Temp/non4A.htm :: :: line 22" data: no]

现在还不知道能不能在Mozilla的config中设置,总之写代码的时候要注意.

我在google上搜索 getElementById 0x8057000c 关键字,还是有很多类似的情况,比如

http://groups.google.co.uk/group/comp.lang.javascript/browse_thread/thread/65a1a23f5dd7c9ad/d264d04d9d768b28?tvc=2#d264d04d9d768b28

没有更好的解决办法,但是可以变通,比这样写

<div id="foo"></div>
<script>
document.$ = document.getElementById;
alert(document.$("foo").innerHTML);
</script>

因为js可以动态的给对象增加属性和方法,上面的例子在ie和moz中测试都可以通过.

发表于 @ 2006年07月12日 02:45:00|评论(loading...)|编辑

新一篇: O'Relly《CSS权威指南》(PDF) 下载 | 旧一篇: Javascript-文字动画,兼容Mozilla

评论

#hax 发表于2006-07-13 00:18:00  IP: 221.137.56.*
这样不知所云的文章csdn也搞上blog头条,实在是……
#tjoy7d 发表于2006-07-20 08:47:00  IP: 222.66.70.*
document.getElementById又不是不同的浏览器都能用的,firefox中就不可以,要用document.all来判断,比如:

var $;
if (!$ && document.getElementById){
//IE的用document.getElementById处理
}
else if (!$ && document.all){
//其它的不支持document.getElementById的,用document.all处理
}
#BlueDestiny 发表于2006-07-20 12:00:00  IP: 219.159.87.*
document.getElementById firefox不能用?不知道我理解错了没有,只要支持DOM的都应该支持document.getElementById。

我这篇随笔只是说明了在FF下直接量不能用变量命名,只能用方法或者函数来实现的
#fat4j 发表于2006-08-17 16:33:00  IP: 211.91.133.*
用window.$ = document.getElementById;
会不会更方便一点???

#BlueDestiny 发表于2006-08-17 23:09:00  IP: 219.159.90.*
用window.$ = document.getElementById;
会不会更方便一点???
-----------------------------
这也就相当于var $=document.getElementById;
在Mozilla中依然是报错的,你可以试试。
#afcn0 发表于2007-08-23 23:54:22  IP: 221.196.255.*
其实是丢失context问题,不是什么ff限制,最先的代码,只要$.call(document,"demo")就可以了,ie设计有问题,把DOM下方法连context都传递过来了
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © never-online