是否有解决方案来解决chrome中的意外全局变量问题

时间:2012-08-31 10:03:48

标签: javascript google-chrome

我刚刚在脚本标签处找到了创建chrome的id,它们存储在窗口对象上。

<script id="deploy" type="text/html">blah</script>

window.deploy =➜

<script id="deploy" type="text/html">blah</script>

Object.keys(window)不包含“部署”

Not a new issue apparently

所以我的问题

有没有人找到解决方案(防止铬污染我的世界)我唯一想出的东西 如下: -

$('script[type="text/html"]').each ->
# stuff
delete window[@.getAttribute 'id']

我的“解决方案”有可能在不使用chrome时删除全局变量。

但是,如果没有我的解决方案,如果脚本ID发生冲突,chrome就会覆盖全局变量。

什么是MESS!

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:4)

  

如果使用id属性命名HTML文档中的元素,并且如果Window对象尚未具有该名称的属性,则Window对象将被赋予不可数量属性,其名称是id属性的值,其值是表示该文档元素的HTMLElement对象。

(由我强调)

来源:JavaScript: The Definitive Guide, 6th Edition

答案 1 :(得分:1)

我想出了什么:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    <script id="deploy" type="text/html">blah</script>
    <script type="text/javascript">
        $(function () {
            $('script[type="text/html"]').each(function (index, element) {
                var id = $(element).attr('id');

                console.log(element);
                console.log(window[id]);

                if (window[id] === element) {
                    window[id] = undefined;
                }

                console.log(window[id]);
            });
        });
    </script>
</head>
<body>

</body>
</html>

这将检查全局是否与删除它之前的节点相同。

请注意,每个ID都会发生这种情况,而不仅仅是script个标记。正如Yoshi所说,它不应该污染你的全球范围,但上述解决方案应该适合你。