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

关于脚本修改网页原生JS函数的求助

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

    [LV.5]常住居民I

    11

    主题

    38

    回帖

    67

    积分

    初级工程师

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

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

    网页源代码中有下列函数,本来我是想取出“11”中的数字,然后执行脚本的if语句。后来发现下面紧接着一个翻页函数。11是一个变量,不是固定的数值。至于从哪里传入的暂时还没研究明白。
    我现在的想法是:
    1、用什么公式从onclick='customTag_TurnToPage("11")中取出数值11;
    2、或者在pageNo=11;后面追加一行自己的if判断语句

    <li><a href='javascript:;' onclick='customTag_TurnToPage("11");return false;'>尾页</a></li>
    <script language='javascript'>
       //翻页函数   
      function customTag_TurnToPage(pageNo){
        //页号越界处理
        if(pageNo>11) {
            pageNo=11;
        }
        if(pageNo< 1){
            pageNo=1;
        }
        if(pageNo==0) {
            pageNo=1;
        }
        $('#pageNo').attr('value',pageNo);
       nextPage();
      }
    </script>
    

    最佳答案

    查看完整内容

    不固定就直接toString,截取、替换、构造函数
  • TA的每日心情
    慵懒
    昨天 08:54
  • 签到天数: 812 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1556

    积分

    荣誉开发者

    积分
    1556

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

    发表于 2022-10-14 14:41:26 | 显示全部楼层
    ZYMKJ 发表于 2022-10-14 15:08
    方法2不对的。 那个pageNo=11;其中11不是固定数值,应该是从服务器返回的数字。但返回数值的函数尚未找 ...

    不固定就直接toString,截取、替换、构造函数
    1. let fuc=customTag_TurnToPage.toString()
    2. fuc=fuc.slice(fuc.search('{')+1,-1)
    3. fuc=fuc.replace("}","//你的代码}")
    4. customTag_TurnToPage=new Function('pageNo',fuc)
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 08:54
  • 签到天数: 812 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1556

    积分

    荣誉开发者

    积分
    1556

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

    发表于 2022-10-14 14:59:22 | 显示全部楼层
    本帖最后由 steven026 于 2022-10-14 15:02 编辑
    1、用什么公式从onclick='customTag_TurnToPage("11")中取出数值11;
    1. document.querySelector('a[onclick*="customTag_TurnToPage("]').onclick.toString().match(/\d+/)
    复制代码
    2、或者在pageNo=11;后面追加一行自己的if判断语句

    直接覆写全局函数
    1.   function customTag_TurnToPage(pageNo){
    2.     //页号越界处理
    3.     if(pageNo>11) {
    4.         pageNo=11;
    5. //直接在这里写代码
    6.     }
    7.     if(pageNo< 1){
    8.         pageNo=1;
    9.     }
    10.     if(pageNo==0) {
    11.         pageNo=1;
    12.     }
    13.     $('#pageNo').attr('value',pageNo);
    14.    nextPage();
    15.   }
    复制代码
    回复

    使用道具 举报

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

    [LV.5]常住居民I

    11

    主题

    38

    回帖

    67

    积分

    初级工程师

    积分
    67
    发表于 2022-10-14 15:08:01 | 显示全部楼层
    steven026 发表于 2022-10-14 14:59
    直接覆写全局函数

    方法2不对的。 那个pageNo=11;其中11不是固定数值,应该是从服务器返回的数字。但返回数值的函数尚未找到。如找到直接调用也OK
    我咨询这个主要是为了学习油猴脚本的各种编写。
    其实就这一个地方需要手动改写,改写一次就OK,不过为了学习才咨询的
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-8-21 01:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    7

    主题

    58

    回帖

    63

    积分

    初级工程师

    积分
    63
    发表于 2022-10-14 21:55:36 | 显示全部楼层

    本帖最后由 笑尘天雨 于 2022-10-14 22:00 编辑

    1. 获取script标签的textContent

      const textContent = document.querySelector('script[language=javascript]').textContent;
    2. 正则匹配替换

      // 匹配关键字段if pageNo >
      const target = textContent.replace(/if\(pageNo>\d+\) {((\n|.)+?)}/, (_, $1) => {
      // 获取pageNo对应的值
      const pageNo = $1.match(/pageNo=(\d+)/)[1];
      // 在原来的基础上添加新的代码
      return _.replace($1, `${$1}\n;console.log('页码',${pageNo});`)
      });
    3. 将更换之后的代码替换回去

      document.querySelector('script[language=javascript]').textContent = target;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-13 00:00
  • 签到天数: 33 天

    [LV.5]常住居民I

    0

    主题

    19

    回帖

    45

    积分

    初级工程师

    积分
    45
    发表于 2022-10-14 22:41:00 | 显示全部楼层
    无脑用eval,直接覆盖掉
    1. eval(customTag_TurnToPage.toString().replace("pageNo=11;","pageNo=11;someting..."));
    复制代码
    回复

    使用道具 举报

    发表回复

    本版积分规则

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