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

unsafewindow里for循环不写var会怎样

[复制链接]
  • TA的每日心情

    昨天 00:11
  • 签到天数: 310 天

    [LV.8]以坛为家I

    12

    主题

    63

    回帖

    643

    积分

    荣誉开发者

    积分
    643

    荣誉开发者生态建设者

    发表于 2022-6-28 12:54:55 | 显示全部楼层 | 阅读模式

    unsafewindow里for循环不写var会怎样

    for循环不写var,看js执行的环境,可能报错,也可能不报错成功运行,还可能不报错默默出问题.

    for循环不写var的几种情况

    • 在grant了unsafewindow的油猴脚本里for循环不加var,没有报错但是不打印
      // @grant        unsafewindow
      for(a = 0;a < 10;a++){ console.log("#"); }
    • for循环里不写var语句或者包含它的函数,在F12里均为不报错且正常打印
      function test(){
      for(a = 0;a < 10;a++){ console.log("#"); }
      }
      for(a = 0;a < 10;a++){ console.log("#"); }
      test();
    • 在grant none的油猴脚本里for循环不写var,会直接报错
      // @grant        none
      for(a = 0;a < 10;a++){ console.log("#"); }
      /* Uncaught ReferenceError: a is not defined */
    • nodejs的环境,正常
      > for(a = 0;a < 10;a++){ console.log("#"); }
      # 正常打印
      > typeof a
      'number'

    起因

    在unsafewindow的情况下,为了生成油猴脚本里某个字段,在Github上找了个相关的nodejs环境的项目,拷贝了里面一大坨生成这个字段的函数,放到F12里先跑一下,没有问题. 然后放进油猴脚本里,字段里有一部分是随机字符串,却总是空的.排查下来,就是其中生成随机字符串的函数出错,又百度到另外的生成随机数的函数将其替换,情况类似于下面这段代码.其中randomString函数来自Js生成随机数 生成随机字符串的5种方法

    // @grant        unsafewindow
    /**
     * 在油猴脚本unsafewindow的情况下for循环里面不写var,将会:
     *  1)没有报错信息
     *  2)得不到想要的结果
     */
    function randomString(e) {// 网上拷贝来的函数
      e = e || 32;
      var t = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678",
      a = t.length,
      n = "";
      /* for里没写var会导致默默出问题 */
      for (i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a));
      return n
    }
    console.log("生成的16位随机字符串:"+randomString(16));/* 输出冒号后为空白 */
    for(a = 0;a < 10;a++){ console.log("#"); }/* #号并没有输出来 */
    console.log(typeof a);/* undefined */

    分析原因,俩人的代码里面for循环里都没写var,这就坑人了,在他们的nodejs环境里不会出错,但在油猴脚本的unsafewindow下是不报错但默默出问题.

    总结

    for循环里哪怕不出语法错误,还是要把var或者let加上去,自己写代码时注意,抄代码时更要注意.

    当冥想的日子飞逝,喧嚣的日子把我们唤去,且在此地留下些微的痕迹
  • TA的每日心情
    开心
    2024-7-30 00:00
  • 签到天数: 122 天

    [LV.7]常住居民III

    29

    主题

    601

    回帖

    542

    积分

    专家

    积分
    542

    油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-6-28 14:02:20 | 显示全部楼层
    这么神奇的吗!unsafewindow真是太霸道了不讲道理,没有报错还不打印,解释权归它所有似的
    // @grant        none 下 删除'use strict'; 也是可行的
    回复

    使用道具 举报

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

    [LV.7]常住居民III

    712

    主题

    5992

    回帖

    6780

    积分

    管理员

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

    积分
    6780

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

    发表于 2022-6-28 14:25:21 | 显示全部楼层

    图片.png
    我这里的话正常打印了。。。透

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

  • TA的每日心情

    昨天 00:11
  • 签到天数: 310 天

    [LV.8]以坛为家I

    12

    主题

    63

    回帖

    643

    积分

    荣誉开发者

    积分
    643

    荣誉开发者生态建设者

    发表于 2022-6-28 15:07:26 | 显示全部楼层
    李恒道 发表于 2022-6-28 14:25
    [md]![图片.png](data/attachment/forum/202206/28/142512opu5z8jzrc9p2z4u.png)
    我这里的话正常打印了。。 ...

    我现在怀疑是不是一之哥不够撸棒,unsafewindow下脚本猫和油猴还不一样,油猴会报错,脚本猫不会..
    当冥想的日子飞逝,喧嚣的日子把我们唤去,且在此地留下些微的痕迹
    回复

    使用道具 举报

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

    [LV.7]常住居民III

    712

    主题

    5992

    回帖

    6780

    积分

    管理员

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

    积分
    6780

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

    发表于 2022-6-28 15:17:43 | 显示全部楼层
    朱焱伟 发表于 2022-6-28 15:07
    我现在怀疑是不是一之哥不够撸棒,unsafewindow下脚本猫和油猴还不一样,油猴会报错,脚本猫不会.. ...

    @王一之 你有你的free鲁棒吗
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-11-21 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4215

    回帖

    4073

    积分

    管理员

    积分
    4073

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

    发表于 2022-6-28 17:26:51 | 显示全部楼层
    朱焱伟 发表于 2022-6-28 15:07
    我现在怀疑是不是一之哥不够撸棒,unsafewindow下脚本猫和油猴还不一样,油猴会报错,脚本猫不会.. ...

    兼容问题挺难处理的,如果你从脚本猫的角度去看,这是油猴的bug,如果从油猴的角度去看,这的脚本猫的bug
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

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

    [LV.1]初来乍到

    22

    主题

    883

    回帖

    1381

    积分

    荣誉开发者

    积分
    1381

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

    发表于 2022-6-28 20:32:09 | 显示全部楼层
    王一之 发表于 2022-6-28 17:26
    兼容问题挺难处理的,如果你从脚本猫的角度去看,这是油猴的bug,如果从油猴的角度去看,这的脚本猫的bug ...

    我记得看到过类似的问题,应该跟严格模式有关:
    https://bbs.tampermonkey.net.cn/thread-1876-1-1.html
    回复

    使用道具 举报

    发表回复

    本版积分规则

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