Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript chrome中是否存在意外全局变量的解决方案_Javascript_Google Chrome - Fatal编程技术网

Javascript chrome中是否存在意外全局变量的解决方案

Javascript chrome中是否存在意外全局变量的解决方案,javascript,google-chrome,Javascript,Google Chrome,我刚刚发现,在chrome中创建的脚本标记id存储在window对象上 <script id="deploy" type="text/html">blah</script> 对象。键(窗口)不包括“部署” 所以我的问题是 有没有人找到了解决办法(防止铬污染我的世界)这是我唯一想到的办法 详情如下:- $('script[type="text/html"]').each -> # stuff delete window[@.getAttribute 'id']

我刚刚发现,在chrome中创建的脚本标记id存储在window对象上

<script id="deploy" type="text/html">blah</script>
对象。键(窗口)
不包括“部署”

所以我的问题是

有没有人找到了解决办法(防止铬污染我的世界)这是我唯一想到的办法 详情如下:-

$('script[type="text/html"]').each ->
# stuff
delete window[@.getAttribute 'id']
我的“解决方案”可能会在不在chrome中时删除全局变量

但是如果没有我的解决方案,如果脚本id冲突,chrome可以覆盖全局变量

真是一团糟

感谢您的帮助

我想到的是:

<!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>

废话
$(函数(){
$('script[type=“text/html”]”)。每个(函数(索引,元素){
var id=$(元素).attr('id');
控制台日志(元素);
console.log(窗口[id]);
if(窗口[id]==元素){
窗口[id]=未定义;
}
console.log(窗口[id]);
});
});
这将检查全局节点是否与节点相同,然后再将其删除

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

我想到的是:

<!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>

废话
$(函数(){
$('script[type=“text/html”]”)。每个(函数(索引,元素){
var id=$(元素).attr('id');
控制台日志(元素);
console.log(窗口[id]);
if(窗口[id]==元素){
窗口[id]=未定义;
}
console.log(窗口[id]);
});
});
这将检查全局节点是否与节点相同,然后再将其删除

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

如果使用
id
属性命名HTML文档中的元素,并且如果窗口对象还没有该名称的属性,窗口对象被赋予一个不可计算的属性,其名称是
id
属性的值,其值是表示该文档元素的HtmleElement对象

(由我强调)

资料来源:

如果使用
id
属性命名HTML文档中的元素,并且如果窗口对象还没有该名称的属性,窗口对象被赋予一个不可计算的属性,其名称是
id
属性的值,其值是表示该文档元素的HtmleElement对象

(由我强调)


来源:

+1供您参考,但中未定义window.deployfirefox@JamesKyburz我也看到了。IE、Safari和Chrome都很难(无法测试Opera)。但无论如何,我不会太担心。首先,没有给出覆盖所需全局文件的机会。第二,不要使用globals同意!我使用启用commonjs。我在尝试创建一个快速且脏的全局变量时发现了这个问题,该变量在创建后不久就被删除了。。。。thx+1供您参考,但中未定义window.deployfirefox@JamesKyburz我也看到了。IE、Safari和Chrome都很难(无法测试Opera)。但无论如何,我不会太担心。首先,没有给出覆盖所需全局文件的机会。第二,不要使用globals同意!我使用启用commonjs。我在尝试创建一个快速且脏的全局变量时发现了这个问题,该变量在创建后不久就被删除了。。。。谢谢