上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

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

[复制链接]
  • TA的每日心情
    擦汗
    2023-4-18 13:55
  • 签到天数: 34 天

    [LV.5]常住居民I

    11

    主题

    38

    回帖

    67

    积分

    初级工程师

    积分
    67
    发表于 2022-10-28 14:31:30 | 显示全部楼层 | 阅读模式
    悬赏10油猫币已解决

    本帖最后由 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.]+)/) || [])[1];
    }

    原生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>

    最佳答案

    查看完整内容

    那脚本就做不到了 上插件吧,改user-agent 【不应该吧 你不会声明了grant吧 要么把部分代码发出来,要不你试试unsafeWindow.alert=()=>{}
  • TA的每日心情
    慵懒
    13 小时前
  • 签到天数: 813 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1556

    积分

    荣誉开发者

    积分
    1556

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2022-10-28 14:31:31 | 显示全部楼层
    本帖最后由 steven026 于 2022-10-28 15:15 编辑
    ZYMKJ 发表于 2022-10-28 15:05
    有。 那个早都有。。还是弹窗

    那脚本就做不到了
    上插件吧,改user-agent

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6763

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6763

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2022-10-28 14:52:46 | 显示全部楼层
    脚本如果追不上触发速度是没办法修改alert条件以及判断了
    脚本也没法控制模态框
    这种情况更推荐用插件或者远程调试浏览器的dll写
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    13 小时前
  • 签到天数: 813 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1556

    积分

    荣誉开发者

    积分
    1556

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2022-10-28 14:54:25 | 显示全部楼层
    本帖最后由 steven026 于 2022-10-28 14:59 编辑

    求解决最简洁的解决方案

    直接干掉alert
    既然能按回车跳过,说明alert没实质作用,只有阻塞这一个作用,后续代码还能正常运行
    那么,无用之人,死
    1. window.alert=()=>{}
    复制代码


    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-4-18 13:55
  • 签到天数: 34 天

    [LV.5]常住居民I

    11

    主题

    38

    回帖

    67

    积分

    初级工程师

    积分
    67
    发表于 2022-10-28 15:02:39 | 显示全部楼层
    steven026 发表于 2022-10-28 14:54
    直接干掉alert
    既然能按回车跳过,说明alert没实质作用,只有阻塞这一个作用,后续代码还能正常 ...

    不好使,还是弹出。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    13 小时前
  • 签到天数: 813 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1556

    积分

    荣誉开发者

    积分
    1556

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2022-10-28 15:04:54 | 显示全部楼层
    ZYMKJ 发表于 2022-10-28 15:02
    不好使,还是弹出。

    //@run-at document-start
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-4-18 13:55
  • 签到天数: 34 天

    [LV.5]常住居民I

    11

    主题

    38

    回帖

    67

    积分

    初级工程师

    积分
    67
    发表于 2022-10-28 15:05:36 | 显示全部楼层
    steven026 发表于 2022-10-28 15:04
    //@run-at document-start

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

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-4-18 13:55
  • 签到天数: 34 天

    [LV.5]常住居民I

    11

    主题

    38

    回帖

    67

    积分

    初级工程师

    积分
    67
    发表于 2022-10-28 15:25:54 | 显示全部楼层
    steven026 发表于 2022-10-28 15:12
    那脚本就做不到了
    上插件吧,改user-agent

       unsafeWindow  就好使了。谢谢
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表