在 JavaScript 中访问原始全局变量和属性
Access original globals and attributes in JavaScript
我正在处理注入网页的代码(使用浏览器插件或带有脚本标签)。
问题是我们想使用全局对象和变量,如JSON
、window.location
、String.split
等,而这些的实现可能已经被网页改变了。这可能会使我们的代码失败,这是一个安全问题。
例:
>>> String.prototype.split = function() { return 'foo'; };
function()
>>> 'a,b,c'.split(','); // gives unexpected result
"foo"
那么,有没有办法访问浏览器对对象和函数的默认实现,就像它们被更改之前一样?它不一定是标准的,我只希望功能存在。
更新
也许更可行的方法是动态创建一个空<iframe>
。
这是一个污染父窗口中String.prototype.split
但从<iframe>
获得干净示例的示例。
<html>
<head>
<script type="text/javascript">
function onBodyLoad() {
String.prototype.split = function() { return 'foo'; }; // contaminate original window
console.log(String.prototype.split); // yeah, it's contaminated
var acr = document.getElementById("accessor");
acr.onclick = function ()
{
var dummyFrame = document.createElement("iframe");
document.body.appendChild(dummyFrame);
console.log(dummyFrame.contentWindow.String.prototype.split); // uncontaminated
}
}
</script>
</head>
<body onload="onBodyLoad()">
<a href="#" id="accessor">Access iframe Window object</a>
</body>
</html>
<小时 />不是一般意义上的;尽管那里可能有一些奇特的黑客。
我能想到的唯一方法是确保在任何其他脚本之前加载您的代码。如果满足该要求,则可以将必要的全局变量克隆到安全位置。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- 如何从jQuery设置控制器或全局变量的属性
- 脚本标记中的全局变量使用's源属性
- nodejs中的Javascript全局变量和属性-全局属性有时会被删除
- 全局变量只是“窗口”对象的属性吗?
- 节点.js全局变量属性被清除
- 在 JavaScript 中访问原始全局变量和属性
- Javascript,获取全局变量属性
- 用于将全局或属性别名为局部变量的 Word 以便更好地压缩
- 基于对象属性修改全局变量
- 将 React 模板放在一个全局变量的属性中
- 我应该如何处理Resharpers检查器提示'使用可能未分配的属性或全局变量'
- 按字符串选择全局变量,包括子属性
- 使用属性来改变javascript插件中的全局变量
- 全局变量的属性范围
- 用jquery保存全局变量img属性位置