thediy 发表于 2023-1-16 18:17:16

多重条件分支该怎么写

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

现在碰到的**困难一,**

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

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

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

setInterval(function(){
if(document.querySelector("div").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").innerText=="再学一遍")){
setTimeout(window.location.replace(ura.u2),3000)
      }
    },5000)//1跳2

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

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

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

steven026 发表于 2023-1-16 18:17:17

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

困难一、疑问三、疑问四

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

代码可以这么写
```js
const ura=['网址1','网址2','网址3'……]
let timer=setInterval(()=>{
    if(document.querySelector("div").innerText=="再学一遍"){
      const index=ura.findIndex(url=>url==window.location.href)
      if(index>-1)setTimeout(window.location.replace(ura),3000)
    }
},5000)
```

李恒道 发表于 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

另外脚本无论写的好坏都是可以开源的,只有交流才能促进写出更好的代码

thediy 发表于 2023-1-16 20:05:14

李恒道 发表于 2023-1-16 18:36
假设课程是一个列表
你的当前课程是其中一个
用const cousrseList.findIndex(item=>item===target)+1就可以 ...

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

原来还有更好的语法

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

李恒道 发表于 2023-1-16 20:52:10

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




加油
有一定开发能力之后可以申请论坛开发者组
页: [1]
查看完整版本: 多重条件分支该怎么写