重写Javascript警报功能 - 不适用于动态添加的JS

时间:2015-08-27 18:05:06

标签: javascript asp.net override

我正在使用Visual Studio 2010来覆盖带有自定义模式框的JS警告框。我使用了以下内容:

(function() {
  var proxied = window.alert;
  window.alert = function(txt) {
  //myFuntion(txt);
  return proxied.apply(this, arguments);
  };
})();

这个Js功能导致我的自定义弹出和放大要显示的警告框。来源taken from here

  window.alert = function(txt) {
  //myFuntion(txt);
  };

适用于aspx页面脚本。 问题是使用RegisterStartupScript后面的代码动态添加的Js警报和RegisterClientScriptBlock仍然显示本机警报框。如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

您提供的第一个代码示例中的代理方法旨在向事件添加功能,而不是替换它。发生的是当调用alert函数时,它将调用你的函数,然后调用标准的window.alert函数。 (Codepen demonstration

(function() {
  var proxied = window.alert; // stores the original window.alert function
  window.alert = function(txt) { // sets a new window.alert
  myfunction(); // calls your function
  return proxied.apply(this, arguments); // calls the original window.alert function
};
})();

第二种方法适合您,因为它不使用代理,它完全取代了window.alert函数(Codepen demonstration

window.alert = function(txt) { // sets a new window.alert function
  myfunction(); // calls your function
};

问题很可能是RegisterStartupScript和RegisterClientScriptBlock在运行更改警报功能的脚本之前渲染其脚本。