[转载]chrome中remove函数的坑 - 斯诺登 - 博客园

[转载]chrome中remove函数的坑 – 斯诺登 – 博客园.

起因

测试的浏览器:ie7 ie8 safari firefox chrome

出现问题代码:

<a href="#" id="test" onclick="remove();">test</a>
<script>
var remove=function(){
    alert('111');
}
</script>

结果:

ie7 ie8 safari firefox 均正常弹出 “111”

chrome <a>元素被移除

http://www.cnblogs.com/danhuang/

经过

首先我怀疑remove是JavaScript保留字(关键字),经证实如我所知remove并非是JavaScript保留字(关键字)

JavaScript的保留字(关键字)请参考:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words

然后在chrome的界面按下F1到帮助里面去搜,也没搜到相关的东西。于是决定自己研究。。。

删掉javascript代码,打开开发者工具,输入:

window.remove

看一下remove函数有没有被定义了,结果是 undefined

说明没有被定义,其实这步是多余的。。。

http://www.cnblogs.com/danhuang/

继续看<a>元素的__proto__

document.getElementById("test").__proto__

在 __proto__HTMLElement 下的 __proto__Element 下,我们看到了

remove: function remove() { [native code] }

至此,真相浮现出来了

http://www.cnblogs.com/danhuang/

结果

解决办法1:改函数名,什么drop啊,remove1啊之类的,记住别用delete,哈哈~~

解决办法2(推荐):使用命名空间(namespace

<a href="#" onclick="XW.remove();">test</a>
<script>
XW = {};
// add remove() to the custom namespace, not the global namespace
XW.remove = function() {
// some code here
};
</script>

http://www.cnblogs.com/danhuang/

探究

chromium Issue:https://code.google.com/p/chromium/issues/detail?id=170395

webkit changeset:http://trac.webkit.org/changeset/129400

http://www.cnblogs.com/danhuang/

教训

详细整洁而且有意义的命名很重要。

 

转载请注明出处,谢谢。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏