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

多重条件分支该怎么写

[复制链接]
  • TA的每日心情
    慵懒
    2024-1-11 13:44
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    4

    主题

    13

    回帖

    22

    积分

    助理工程师

    积分
    22
    发表于 2023-1-16 18:17:16 | 显示全部楼层 | 阅读模式
    悬赏10油猫币已解决

    我在做一个培训挂机的脚本,技术太菜,只敢自己用。发出去会被人笑死。
    培训的自动播放之类的小问题已经解决。
    剩下一件事是
    一共有10个课,在不同页面,我的想法是从第一课挂完以后自动跳到第二课,第二课完了自动跳到第三课。

    现在碰到的困难一,

    当视频画面显示 再看一遍,表示视频已经看完了,可以跳到下一课了。
    我将10课的网址保存到数组中

    //保存10课到数组
    var ura= {
    u1: "网址1“
    u2: "网址2“
    u3: "网址3“
    ......

    let url = window.location.href; //获取当前页面网址

    setInterval(function(){
    if(document.querySelector("div[class='course-video-reload']").innerText=="再学一遍")
    if(url = (ura.u2)){setTimeout(window.location.replace(ura.u3),3000)}
    if(url = (ura.u3)){setTimeout(window.location.replace(ura.u4),3000)}
    if(url = (ura.u4)){setTimeout(window.location.replace(ura.u5),3000)}
    },5000)

    上面的条件语句我知道写得是不对的
    想问的是
    当 条件1 = 视频显示再学一扁
    且条件2 = a ,则 跳到 2
    条件2 = b 则 跳到 3
    条件2 = c 则 跳到 4
    ...........

    这样的语句该怎么写?

    疑问二
    我写的脚本从目录页打开课页时,油猴并没有加载这个脚本,要刷新一下才会加载,这是为什么?

    疑问三
    let url = window.location.href; //获取当前页面网址
    当从课1跳转到课2后,这时候获取到的url,是课1时的,还是会重新获取课2的url?

    疑问四
    我之前还这样写过

    let url = window.location.href; //获取当前页面网址

    setInterval(function(){
    if(url = (ura.u1) && (document.querySelector("div[class='course-video-reload']").innerText=="再学一遍")){
    setTimeout(window.location.replace(ura.u2),3000)
    }
    },5000)//1跳2

    setInterval(function(){
    if(url = (ura.u2) && (document.querySelector("div[class='course-video-reload']").innerText=="再学一遍")){
    setTimeout(window.location.replace(ura.u3),3000)
    }
    },5000)//2跳3

    我先写了3课,这样跑起来,发现直接从第1课跳到第3课了,没有去第2课。
    如果我写5课,第1课之后就会跑到5.
    我知道是错了,但不知道错在哪里。

    中年小白,学习能力差,还请大神指点一二。感激不尽。

    最佳答案

    查看完整内容

    [md]困难一、疑问三、疑问四 `window.location.href`返回的是静态文本,所以`let url = window.location.href;`除非重新赋值不然就是固定不变的 代码可以这么写 ```js const ura=['网址1','网址2','网址3'……] let timer=setInterval(()=>{ if(document.querySelector("div[class='course-video-reload']").innerText=="再学一遍"){ const index=ura.findIndex(url=>url==window.location.href) if(index>- ...
  • TA的每日心情
    慵懒
    昨天 23:59
  • 签到天数: 634 天

    [LV.9]以坛为家II

    30

    主题

    535

    回帖

    1408

    积分

    荣誉开发者

    积分
    1408

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

    发表于 2023-1-16 18:17:17 | 显示全部楼层

    本帖最后由 steven026 于 2023-1-16 18:36 编辑

    困难一、疑问三、疑问四

    window.location.href返回的是静态文本,所以let url = window.location.href;除非重新赋值不然就是固定不变的

    代码可以这么写

    const ura=['网址1','网址2','网址3'……]
    let timer=setInterval(()=>{
        if(document.querySelector("div[class='course-video-reload']").innerText=="再学一遍"){
            const index=ura.findIndex(url=>url==window.location.href)
            if(index>-1)setTimeout(window.location.replace(ura[index==ura.length ? 0 : index+1]),3000)
        }
    },5000)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    637

    主题

    5196

    回帖

    6078

    积分

    管理员

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

    积分
    6078

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

    发表于 2023-1-16 18:36:53 | 显示全部楼层
    假设课程是一个列表
    你的当前课程是其中一个
    用const cousrseList.findIndex(item=>item===target)+1就可以得到下一个
    但是要注意边界条件判断

    我写的脚本从目录页打开课页时,油猴并没有加载这个脚本,要刷新一下才会加载,这是为什么?

    match没有匹配上,现代网页很多都是SPA页面
    可能你匹配www.baidu.com/aa
    进入www.baidu.com,然后判断权鉴,再跳转到www.baidu.com/aa
    这时候match是匹配不上的,但是最后路径却在本地跳转到了对应网址
    而这时候因为网页没有重新加载,所以不会加载脚本,相当于一次前端的转换

    let url = window.location.href; //获取当前页面网址
    当从课1跳转到课2后,这时候获取到的url,是课1时的,还是会重新获取课2的url?
    2的

    疑问四
    setinterval是异步执行,不会阻塞,也就是说到时间后会直接把你setinterval的全部执行一遍
    因为5在最后所以就跳五了

    类似的可以参考
    [油猴脚本开发指南]Promise执行顺序问题
    https://bbs.tampermonkey.net.cn/thread-894-1-1.html

    另外脚本无论写的好坏都是可以开源的,只有交流才能促进写出更好的代码
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-1-11 13:44
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    4

    主题

    13

    回帖

    22

    积分

    助理工程师

    积分
    22
    发表于 2023-1-16 20:05:14 | 显示全部楼层
    李恒道 发表于 2023-1-16 18:36
    假设课程是一个列表
    你的当前课程是其中一个
    用const cousrseList.findIndex(item=>item===target)+1就可以 ...

    感谢二位大佬指点,我的谜团一下子解开了。
    一直纠结于怎么写if

    原来还有更好的语法

    这两天一边看js 一边尝试写这个,实在还是懂得太少。
    感谢二位指点迷津。收获满满。
    对了,我的确是match到   /courseIndex?courseId=*,看来通配符不能这么用,学到了。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    637

    主题

    5196

    回帖

    6078

    积分

    管理员

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

    积分
    6078

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

    发表于 2023-1-16 20:52:10 | 显示全部楼层
    thediy 发表于 2023-1-16 20:05
    感谢二位大佬指点,我的谜团一下子解开了。
    一直纠结于怎么写if


    加油
    有一定开发能力之后可以申请论坛开发者组
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

    发表回复

    本版积分规则

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