JavaScript 可以轻松覆盖全局对象的属性和函数。我想找到一种方法来检查全局属性的原始版本是否已被替换。
考虑有人将其放入 HTML 中:
<script type="text/javascript">
window.encodeURIComponent = eval;
</script>
<script type="text/javascript" src="myscript.js"></script>
如果 myscript.js 在某处调用encodeURIComponent 函数,它现在的行为将变得不可预测。那么有没有一种方法可以在我使用 myscript.js 之前检查是否有人覆盖了该函数?
我唯一知道的是分析函数的字符串表示的直接方法。通常情况下,代码
window.encodeURIComponent.toString()
应该产生这样的结果:
function encodeURIComponent() { [native code] }
可以轻松解析关键信息function encodeURIComponent
.
如果该函数被覆盖eval
,如您的示例所示,您将得到:
function eval() { [native code] }
一般来说,用于检查window
属性,您可以创建一个假 iframe 并进行比较window.[property].toString()
with iframe.contentWindow.[property].toString()
。如果比较给出false
,属性已更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)