chrome中的意外全局变量有解决方案吗
Is there a solution to unexpected global variable in chrome
我刚刚在脚本中发现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中时,我的"解决方案"有删除全局变量的风险。
但是,如果没有我的解决方案,chrome可以在脚本id冲突时覆盖全局变量。
真是一团糟!
感谢您的帮助!
如果您使用
id
属性来命名HTML文档中的元素,并且Window对象还没有该名称的属性,则会为Window对象提供一个不可计数的属性,该属性的名称是id
属性的值,其值是表示该文档元素的HTMLElement对象。
(我强调)
来源:JavaScript:最终指南,第6版
我想到了什么:
<!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所说,它不应该污染你的全球范围,但上述解决方案应该对你有效。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- javascript隐式全局变量
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- iPad虚拟键盘-哪一个-javasctript解决方案
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 如何使全局变量仅特定于该文件
- chrome中的意外全局变量有解决方案吗
- 当我想发布一个变量但有 1 个 js 时,ajax post 的解决方案是什么
- Javascript全局变量简单解决方案
- 是否有仅 CSS(无 JavaScript)解决方案可以将变量内容适合垂直网格
- 全局变量的替代方案
- 如何在Javascript变量内编写for循环,或者是否有其他解决方案
- 无法用Angular从HTML视图获取值到控制器.解决方案返回$scope变量undefined
- 客户端脚本解决方案,用于捕获javascript web应用程序中的输出变量
- Jquery解决方案/ javascript函数分配变量