我刚刚发现我们可以拦截 javascript alert() native 调用并在实际执行之前挂接用户代码。查看示例代码..
function Test(){
var alertHook=function(aa){
this.alert(aa);
}
this.alert("aa");
this.alert = alertHook;
alert("aa");
}
所以每次我调用 alert("aa") 时都会被我的 alertHook 本地函数拦截。但是下面的小改动实现不起作用。
function Test(){
var alertHook=function(aa){
alert(aa);
}
alert("aa");
alert = alertHook; //throws Microsoft JScript runtime error: Object doesn't support this action
alert("aa");
}
它抛出 Microsoft JScript 运行时错误:对象不支持此操作。
我不知道如何this.alert = alertHook;让我拦截电话,但是 alert=alertHook;不是。??
所以我假设使用它来拦截任何 native js 方法。?是对的吗?
这是可以接受的吗?因为这样我就可以用我自己的方法完全替换任何原生 JS 调用??
更新:
我问可以接受吗?因为这是一种使用 eval() 并让用户替换 native 函数调用的好方法吗?
一种语言的责任是保护开发人员免受误导性功能的影响,在窗口级别(或在通用框架 js 文件中)替换 native js 调用会使整个系统崩溃。不是吗??
我的看法可能是错误的,因为我不明白此功能背后的原因..?我从未见过一种语言可以让开发人员替换自己的实现..
最佳答案
根据 Test();
的调用方式,this
应该是 window
对象。
我相信微软只允许通过指定 window 对象来覆盖原生 JS 函数。
所以 window.alert = alertHook;
应该可以在任何地方使用。
可以接受吗?
是的。这是语言灵 active 的一个主要优势,尽管我确信有更好的替代方案而不是覆盖 native 行为。
覆盖 native JavaScript 函数并不是真正的安全问题。如果您正在运行执行此操作的其他人的代码,则可能是一个;但是,如果您正在运行其他人的代码,那么您应该关注许多其他安全问题。
关于javascript - 拦截 javascript alert()..?可以接受吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2093586/