ZYMKJ 发表于 2022-10-28 14:31:30

脚本修改 原生JS 判断浏览器版本的判定

本帖最后由 ZYMKJ 于 2022-10-28 14:44 编辑

> 本帖最后由 ZYMKJ 于 2022-10-28 14:35 编辑

> 本帖最后由 ZYMKJ 于 2022-10-28 14:34 编辑

网页头部引用了browser.js对浏览器及其版本进行了判断。
我用的360极速浏览器,每次打开都谈alert弹窗,必须按回车或者其他键才能继续进行下一步,导致脚本进行不下去
现在有4个思路:
1、脚本直接修改navigator.userAgent.toLowerCase()的返回值("mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/86.0.4240.198 safari/537.36");

2、劫持browser.js,使下段代码失效
```
if(!isIeBrowser()){
                alert('请使用IE8.0及以上版本浏览器听课!');
        }else if(parseInt(getBrowserVersion()) != NaN && parseInt(getBrowserVersion()) < 8 ){
                alert('请使用IE8.0及以上版本浏览器听课!');
        };
```




3、覆盖原生JS代码,去掉alert弹窗(网页原生JS中的a12176141 是随机值,不能动,只去掉if(){alert}中的alert);

4、简单粗暴,脚本直接模拟键盘输入 回车键。但alert会打断脚本执行

求解决最简洁的解决方案

代码如下:
```
function isIeBrowser(){
        var userAgent = navigator.userAgent.toLowerCase();
        return /msie/.test(userAgent) && !/opera/.test(userAgent);
}
function isChromeBrowser(){
        var userAgent = navigator.userAgent.toLowerCase();
        return /chrome/.test(userAgent);
}
/**
* 获取浏览器版本号
* @returns
*/
function getBrowserVersion(){
        var userAgent = navigator.userAgent.toLowerCase();
        return (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || []);
}
```

原生JS 对返回值进行了判断
```
<script type="text/javascript">
$(document).ready(function(){
        //如果不是ie浏览器
        if(!isIeBrowser()){
                alert('请使用IE8.0及以上版本浏览器听课!');
        }else if(parseInt(getBrowserVersion()) != NaN && parseInt(getBrowserVersion()) < 8 ){
                alert('请使用IE8.0及以上版本浏览器听课!');
        }
       
        var isHttps = location.protocol.indexOf('https') != -1;
        var thisUrl1 = isHttps ? 'https://****/a12176141/index.html' : '/course/a12176141/index.html';
        var thisUrl2 = isHttps ? 'https://****/a12176141/index.htm' : '/course/a12176141/index.htm';
        $.ajax({
      url:'/course/a12176141/index.html',
      type:"get",
      success:function(){
      //说明请求的url存在,并且可以访问
       $("#courseplay").attr("src", thisUrl1);
      },
      statusCode:{
      404:function(){
          //说明请求的url不存在
          $("#courseplay").attr("src", thisUrl2);
      }
      }
    });

});
</script>
```

steven026 发表于 2022-10-28 14:31:31

本帖最后由 steven026 于 2022-10-28 15:15 编辑

ZYMKJ 发表于 2022-10-28 15:05
有。 那个早都有。。还是弹窗
那脚本就做不到了
上插件吧,改user-agent

【不应该吧 你不会声明了grant吧 要么把部分代码发出来,要不你试试unsafeWindow.alert=()=>{}

李恒道 发表于 2022-10-28 14:52:46

脚本如果追不上触发速度是没办法修改alert条件以及判断了
脚本也没法控制模态框
这种情况更推荐用插件或者远程调试浏览器的dll写

steven026 发表于 2022-10-28 14:54:25

本帖最后由 steven026 于 2022-10-28 14:59 编辑


求解决最简洁的解决方案
直接干掉alert{:4_86:}
既然能按回车跳过,说明alert没实质作用,只有阻塞这一个作用,后续代码还能正常运行
那么,无用之人,死
window.alert=()=>{}

ZYMKJ 发表于 2022-10-28 15:02:39

steven026 发表于 2022-10-28 14:54
直接干掉alert
既然能按回车跳过,说明alert没实质作用,只有阻塞这一个作用,后续代码还能正常 ...

不好使,还是弹出。

steven026 发表于 2022-10-28 15:04:54

ZYMKJ 发表于 2022-10-28 15:02
不好使,还是弹出。

//@run-at document-start

ZYMKJ 发表于 2022-10-28 15:05:36

steven026 发表于 2022-10-28 15:04
//@run-at document-start

有。 那个早都有。。还是弹窗

ZYMKJ 发表于 2022-10-28 15:25:54

steven026 发表于 2022-10-28 15:12
那脚本就做不到了
上插件吧,改user-agent



   unsafeWindow就好使了。谢谢
页: [1]
查看完整版本: 脚本修改 原生JS 判断浏览器版本的判定