我刚刚在脚本标签处找到了创建chrome的id,它们存储在窗口对象上。
<script id="deploy" type="text/html">blah</script>
window.deploy
=➜
<script id="deploy" type="text/html">blah</script>
Object.keys(window)
不包含“部署”
所以我的问题
有没有人找到解决方案(防止铬污染我的世界)我唯一想出的东西 如下: -
$('script[type="text/html"]').each ->
# stuff
delete window[@.getAttribute 'id']
我的“解决方案”有可能在不使用chrome时删除全局变量。
但是,如果没有我的解决方案,如果脚本ID发生冲突,chrome就会覆盖全局变量。
什么是MESS!
任何帮助表示赞赏!
答案 0 :(得分:4)
如果使用
id
属性命名HTML文档中的元素,并且如果Window对象尚未具有该名称的属性,则Window对象将被赋予不可数量属性,其名称是id
属性的值,其值是表示该文档元素的HTMLElement对象。
(由我强调)
答案 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所说,它不应该污染你的全球范围,但上述解决方案应该适合你。