javascript - 拦截 javascript alert()..?可以接受吗?

标签 javascript alert api-hook

我刚刚发现我们可以拦截 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/

相关文章:

c# - 注册表监控,包括内核模式注册表访问?

javascript - element.style.backgroundColor 不适用于 WordPress

javascript - Ajax 页面完全加载然后更新 DIV

javascript - 改变顺序

JavaScript - iPad 应用程序中的警报消息

iOS Swift - 带有页面的警告对话框

javascript - linkedin 未捕获错误 : You must specify a valid JavaScript API Domain as part of this key's configuration

javascript - 与用户一起使用 js 警报是否不受欢迎

c++ - COM 对象函数上的 API Hook ?

c# - 从外部应用程序读取屏幕上的文本。 API Hook ?