360浏览器兼容模式下,浏览器调整大小时抛脚本异常的问题

Posted herohh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了360浏览器兼容模式下,浏览器调整大小时抛脚本异常的问题相关的知识,希望对你有一定的参考价值。

这段时间遇到项目上的一个错误:

360浏览器,兼容模式下(即IE内核)打开项目。调整浏览器大小的时候,在如下的代码段抛如下异常:出错:无法获取未定义或null引用的属性“clientX”

但是谷歌、火狐、IE都不会出现该错误。

通过在360浏览器调试查看到报错的代码段为如下。抛错是因为这里的event事件为undefined。

if(client_x != event.clientX || client_y != event.clientY){
    client_x = event.clientX;
    client_y = event.clientY;
    window_onresize_org();
}

然后在项目里面全局搜索改代码段,竟然找不到~~。只能怀疑该代码是不是360浏览器本身植入的(因为以前遇到过一次类似的问题)。

一开始的思路是觉得无法避开该代码(如果仍然是在该浏览器上运行的话),那么就在触发该代码前判断event是否为undefined。如果是,那么不去执行。

具体避开的做法是通过调试时候查看堆栈,找到我们自己的项目的代码的调用入口,然后对对象的event进行判断。但是发现这样并不行,因为通过我们的代码入口,经过jquery的一系列调用跳转后,到达该抛错代码时,对象或许已经不是原来的那个对象了。 、

后面只能另想他法。考虑到这是调整浏览器大小引起的,而且有自定义window.onresize事件。那么就先从这个事件跟踪起。后面竟然发现这个onresize事件竟然在不知道什么时候已经被重写了。即使在执行我们自定义的onresize事件时,通过监视得到的onresize的定义已然改变!而且这个代码就是那报错的代码!

技术图片

到这里后至少知道了问题出在哪里。接下来只能在触发这个bug的我们的代码的入口来重置onresize事件(如果是360浏览器且是兼容模式的话)。

至于说onresize事件什么时候被修改了就不知道从哪里查了。。

 

以上是关于360浏览器兼容模式下,浏览器调整大小时抛脚本异常的问题的主要内容,如果未能解决你的问题,请参考以下文章

360浏览器怎样切换到兼容模式?

360极速浏览器以及360安全浏览器在兼容模式下验证码图片显示不来,但是极速模式可以显示?

解决360浏览器兼容模式的页面显示问题

解决360浏览器兼容模式的页面显示问题

解决360浏览器兼容模式的页面显示问题

Angularjs在360兼容模式下取数据缓存问题解决办法