【问题标题】:JS Proxy PatternJS 代理模式
【发布时间】:2011-03-04 20:53:50
【问题描述】:

我使用此代码覆盖 window.alert 函数。 该函数将中断替换为 \r\n。 它在 Firefox 中运行良好,但在 IE 中当然不行。 我收到错误消息:不支持属性或方法。

(function() {
  var proxied = window.alert;
  window.alert = function(txt) {
    txt = txt.replace(/<br>/g, "\r\n");
    return proxied.apply(this, arguments);
  };
})();

请帮助我找到解决方案! 谢谢

【问题讨论】:

  • 你在哪一行得到错误?

标签: javascript jquery design-patterns proxy-pattern


【解决方案1】:

这对于本机 JavaScript 函数来说很好,但对于诸如 window 之类的宿主对象的方法来说是非常危险的。宿主对象不受本机 JavaScript 对象的正常规则的约束,并且可以(并且确实)在很大程度上随心所欲地表现,在不同的浏览器中通常会有所不同。因此,我强烈建议不要为 window.alert 或任何其他主机方法追求这个想法。

【讨论】:

    【解决方案2】:

    我会这样做,以防 window.alert 不是 IE 中的“真正”函数:

    (function() {
      var proxied = window.alert;
      window.alert = function(txt) {
        txt = txt.replace(/<br>/g, "\r\n");
        return proxied(txt);
     };
    })();
    

    抱歉,未经测试,它有效吗?

    【讨论】:

    • 感谢您的回复。现在错误消失了,并且显示了警报,但没有替换中断。不过,它在 FF 中仍然可以正常工作。有什么想法吗?
    • 我更改了脚本中代码的位置,现在它在 IE 和 FF 中都可以正常工作。谢谢维克多! @Tim,我感谢您的输入,我知道这不是最好的方法,但否则我不得不将脚本中的警报功能替换为定制的警报功能。知道我的网站上有超过 1000 个脚本,这是不可行的。
    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多