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

关于原本元素上本来已经监听click事件导致无法接受click()

[复制链接]

该用户从未签到

1

主题

2

回帖

4

积分

助理工程师

积分
4
发表于 2021-10-15 12:12:08 | 显示全部楼层 | 阅读模式

问题是这样的, 最近有个刷课的需求,不奢求快进后台禁音什么的,我的思路很简单.
页面上视频上方会延后显示当前学习进度,我检测到100%后,就直接给下一章节元素发送一个click()过去,让他跳转到下一个章节上.

但是在编写的过程中发现无论向这个div或者它内部的span发送click()都没有任何效果.

因为这个元素是在上方导航栏,所以也排除了后续加载导致无法click的原因,后来我在网上看到有人说原因是本身就已经在监听click事件才导致的.
所以我使用下面的方法清除了监听事件,但是发现也没有效果.

document.removeEventListener('click', window.getEventListeners(document).click[0].listener)

通过浏览器自带的调试功能,Event Listeners 来查看click的事件,这时候我发现它只监听了div,没有监听下一级的span,但是通过浏览器调试功能清除事件之后,就算用鼠标点击该元素也不会跳转了.
我可以通过调试功能看到这个click的监听事件指向了网站自己的一个js脚本, 我想知道有没有什么办法可以让我的脚本接管这个过程,实现点击跳转页面的功能.

非常感谢各位的帮助.

下面是我的代码

(function() {
'use strict';

// Your code here...
    function nextVideo(){
        var pace = document.getElementsByClassName("el-tooltip item")[0];
        var nextButton = document.getElementsByClassName("btn-next ml20 pointer")[0];
        if (pace == null || nextButton == null){
            console.log("没有找到目标元素,等待页面完整载入");
        } else {
            // 我发现这个网站的提示信息居然会发生一点小小的变化,可能会自行在不定位置添加空格.
            let r = new RegExp("100%");
            if (r.test(pace.textContent)){
                nextButton.firstChild.click();
                nextButton.click(); // 无论是div还是span都一样没效果
                console.log("已经执行点击了,但是没有效果");
                //location.reload();
            }else{
                console.log(pace.textContent);
            }
        }
    }
    window.setInterval(nextVideo, 10000);
})();

相关截图 bbs_21101501.png

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

    [LV.7]常住居民III

    634

    主题

    5174

    回帖

    6055

    积分

    管理员

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

    积分
    6055

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

    发表于 2021-10-15 12:40:04 | 显示全部楼层
    哥哥可以私聊一个账号密码?
    我进去看看
    看描述实在有点搞不清状况
    QQ4548212
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

    该用户从未签到

    1

    主题

    2

    回帖

    4

    积分

    助理工程师

    积分
    4
    发表于 2021-10-15 12:56:20 | 显示全部楼层
    李恒道 发表于 2021-10-15 12:40
    哥哥可以私聊一个账号密码?
    我进去看看
    看描述实在有点搞不清状况

    谢谢你的帮助,不过账号密码确实不能给出,这网站账号是身份证号你懂的.
    谢谢.
    回复

    使用道具 举报

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

    [LV.7]常住居民III

    634

    主题

    5174

    回帖

    6055

    积分

    管理员

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

    积分
    6055

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

    发表于 2021-10-15 13:26:16 | 显示全部楼层
    Opan 发表于 2021-10-15 12:56
    谢谢你的帮助,不过账号密码确实不能给出,这网站账号是身份证号你懂的.
    谢谢. ...

    对addeventlistener做层过滤试一试
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    862

    回帖

    1360

    积分

    荣誉开发者

    积分
    1360

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2021-10-15 18:32:11 | 显示全部楼层
    getEventListeners是chrome自己加的调试命令,只能在控制台中使用,脚本无法调用的。点击无效有好几种可能,比如click事件是延迟绑定的,脚本注入时可能还没有click事件,或者click内部对isTrusted做了检测,还有可能是在事件传播过程中被stopPropagation/stopImmediatePropagation阻断了传播过程(这个排查起来比较麻烦)。最好还是跟进去你说的那个js文件中看看代码,必要时可以自己重新做一个click事件。
    回复

    使用道具 举报

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

    [LV.7]常住居民III

    634

    主题

    5174

    回帖

    6055

    积分

    管理员

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

    积分
    6055

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

    发表于 2021-10-15 21:47:35 | 显示全部楼层
    cxxjackie 发表于 2021-10-15 18:32
    getEventListeners是chrome自己加的调试命令,只能在控制台中使用,脚本无法调用的。点击无效有好几种可能 ...

    不亏是大佬!
    严谨!
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

    该用户从未签到

    1

    主题

    2

    回帖

    4

    积分

    助理工程师

    积分
    4
    发表于 2021-10-16 15:37:42 | 显示全部楼层
    cxxjackie 发表于 2021-10-15 18:32
    getEventListeners是chrome自己加的调试命令,只能在控制台中使用,脚本无法调用的。点击无效有好几种可能 ...

    非常感谢. 因为网站的特殊我怀疑可能是做了特殊的处理. 但是那个js文件是用webpack打包过的,昨天看得我头都大了. 我打算另外想办法再研究一下.
    回复

    使用道具 举报

    发表回复

    本版积分规则

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