js 三方脚本覆盖方法怎么解决?

js脚本中一些常用的方法,例如window.onbeforeunload 网页关闭触发一些事件。怎么确保一些三方插件,比如在线客服,三方js覆盖该方法,导致自己的业务丢失呢?

阅读 2.3k
1 个回答

在业务代码设定完onbeforeunload之后, 通过Object.defineProperty设定onbeforeunload属性,

var _onbeforeunload = window.onbeforeunload;
Object.defineProperty(window, 'onbeforeunload', {
    get: function() {
        return _onbeforeunload;
    },
    set: function(newOnBeforeUnload) {
        _onbeforeunload = function() {
            if (typeof _onbeforeunload === 'function') {
                _onbeforeunload.apply(this, arguments);
            }
            return newOnBeforeUnload.apply(this, arguments);
        };
    },
    enumerable : true,
    configurable : true
});
推荐问题