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

使脚本支持Jscript语法从而能够同时运行于脚本猫与WScript

[复制链接]
  • TA的每日心情
    开心
    2022-10-9 08:55
  • 签到天数: 40 天

    [LV.5]常住居民I

    16

    主题

    32

    帖子

    271

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    271

    荣誉开发者国庆纪念章家财万贯新人报道喜迎中秋推广达人油中2周年三好学生

    发表于 2022-10-17 12:29:51 | 显示全部楼层 | 阅读模式

    本帖最后由 张正则 于 2022-10-17 12:33 编辑

    做了这么久脚本开发以来,我在脚本兼容性方面遇到了很多问题,大多数情况都是适配不同的浏览器环境,不同的网络环境,以及对不同脚本插件的兼容,但有一个不是问题的问题,却一直困扰着我,有些用户在未安装任何脚本插件的情况下,直接点击安装脚本,浏览器会自动下载一个js文件到用户电脑,按照正常思路,用户就会双击这个js文件,然后这时电脑就会报错,然后用户截图,去问为什么不能用,然后群友解答,说必须安装脚本猫,这一整套流程看起来没啥问题,但使我疑惑的一点就是,为什么windows系统默认可以打开js,而不是询问使用什么软件?于是我展开了一些研究。


    通常,未进行过编程开发的用户把js文件下载下来以后,会显示如图所示的一个文件:


    image


    然后用户双击打开,会出现类似报错:


    image


    仔细观察,会发现windows系统自带能够打开js文件的软件,软件名为Microsoft ®Window Based Script Host,它会像浏览器解析Javascript一样解析我的文本文件,不过这个软件只支持Jscript,遇到Javascript就理所应当的报错了,那么脑洞发散一下,如果我写出既支持Javascript也支持Jscript的脚本,是不是就能直接在用户桌面上alert一下,提醒用户安装脚本猫呢?


    开始行动,首先百度一下Jscript

    JScript是由微软公司开发的活动脚本语言,是微软对ECMAScript规范的实现。JScript最初是随Internet Explorer 3.0于1996年8月发布。在网络程序员谈论Internet Explorer中的JavaScript的时候,他们实际上是指JScript。和其他活动脚本一样,它后来也被Windows Script Host(WSH)和Active Server Pages所支持。典型的JScript源文件使用的扩展名是.js。JScript最新的版本是基于尚未定稿的ECMAScript4.0版规范的JScript .NET,并且可以在微软的.Net环境下编译。JScript在ECMA的规范上增加了许多特性。

    初步的了解后,我了解Jscript是微软为了自家产品IE浏览器开发的一款脚本语言,最新版支持ECMAScript4.0规范,因为IE停更了,并且竞争不过javascript、并且因为IE也支持JavaScript,所以Jscript被无情抛弃,几乎无人使用,不过Jscript也支持在桌面运行,原因如下:

    在Windows 98之前的Microsoft Windows版本几乎不提供自动化的协助,例如备份文件或执行例行的系统管理工作。您当然可以在M S-DOS模式窗口中使用旧的MS-DOS批处理文件(BAT)来完成某些工作,例如复制档案。但是批处理文件只能够执行一连串简单的MS-DOS指令(其缺点包括了只有简单的条件分支和没有实际的循环功能等),并且也不支持对话盒和讯息盒。在Windows 3.1里面,您可以透过Macro Recorder来记录并执行简单的击键和鼠标点按的动作,但他无法用来撰写程序。

    微软开发了.bat格式与.js格式文件的编译器,为了用户能够自己编写脚本用于处理windows日常事务,类似定期关机、备份文件等自动化任务,不过非常不幸,.js没有竞争过.bat,现在的批处理文件也以.bat为主了


    image


    JScript被全方位抛弃,这也就间接导致了,网上关于JScript的资料极少,甚至和javascript混为一谈,不过非常幸运,我在百度文库找到了我苦苦追寻的JScript详细介绍:https://wenku.baidu.com/view/bb4e30649b6648d7c1c7469b.html


    image


    非常幸运,JScript与Javascript语法类似,所以,可以在代码最开始写上一段兼容代码,检测脚本的运行环境,如果环境不符,就弹窗提示,如图所示:


    image


    原文链接:https://cloud.tencent.com/developer/ask/sof/171055
    其中的注释利用了JScript的另一特性:条件注释,参考:https://www.php.cn/js-tutorial-7791.html


    接下来开始写代码:


    image


    不出意外,报错了:


    image


    继续痛苦的百度,发现是文本编码导致的无法识别中文字符串,把文件编码改成ANSI就好了,但又遇到了另一个问题,从脚本猫/GF上下载的文件会自动转换为UTF-8,那就尴尬了,如果脚本中包含任何中文字符串,脚本就会报错无法编译,没办法,改成英文代码,如图:


    image


    桌面双击成功运行:


    image


    脚本猫成功运行:


    image


    还不要高兴的太早!js编译器的逻辑是先检查语法错误,再运行代码,所以说,如果你想要在你的脚本里集成这个功能,你不仅要使脚本为英文脚本(注释不算),还要保证你的代码风格为2008年的复古风格,不能用箭头函数,不能用const,不能用let等等,参考:https://learn.microsoft.com/zh-hk/previous-versions/visualstudio/visual-studio-2008/xkx7dfw1(v=vs.90)


    不过非常幸运,你可以使用babel将你的代码一键转换为北京奥运会版本,参考:https://www.babeljs.cn/ ,如图所示,目标浏览器改为ie 8!


    image


    奶奶的感觉自己是为了这个醋才包的饺子,有点削足适履的意思了,等以后有机会出国可以再试试


    脚本demo:https://scriptcat.org/script-show-page/677

    已有2人评分好评 油猫币 贡献 理由
    柒伍七 + 1 + 1 ggnb!
    王一之 + 1 + 4 + 1 感谢分享

    查看全部评分 总评分:好评 +2  油猫币 +5  贡献 +1 

  • TA的每日心情
    开心
    2022-11-24 01:43
  • 签到天数: 126 天

    [LV.7]常住居民III

    201

    主题

    2622

    帖子

    2653

    积分

    管理员

    Rank: 10Rank: 10Rank: 10

    积分
    2653

    荣誉开发者喜迎中秋热心会员活跃会员突出贡献三好学生管理员家财万贯油中2周年

    发表于 2022-10-17 13:46:08 | 显示全部楼层
    学到了,感谢分享

    不过还得转译支持ie8,这感觉特性用多一点不知道会怎么样
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    开心
    8 小时前
  • 签到天数: 106 天

    [LV.6]常住居民II

    7

    主题

    72

    帖子

    132

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    132

    新人报道荣誉开发者家财万贯喜迎中秋国庆纪念章油中2周年

    发表于 2022-10-18 12:02:43 | 显示全部楼层
    ++(奇怪的知识);
    QAQ

    不过代价有一点点大啊,不能用中文,还要转化为远古时代的代码规范,要是有些新特性是老规范无法实现的就更难办了 X﹏X
    人情似纸张张薄,世事如棋局局新。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    21 小时前
  • 签到天数: 167 天

    [LV.7]常住居民III

    12

    主题

    298

    帖子

    681

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    681

    新人进步奖荣誉开发者喜迎中秋油中2周年

    发表于 2022-10-18 15:58:16 | 显示全部楼层

    Vikrant 发表于 2022-10-18 12:02

    ++(奇怪的知识);
    QAQ

    建议eval
    包治百病

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-24 01:43
  • 签到天数: 126 天

    [LV.7]常住居民III

    201

    主题

    2622

    帖子

    2653

    积分

    管理员

    Rank: 10Rank: 10Rank: 10

    积分
    2653

    荣誉开发者喜迎中秋热心会员活跃会员突出贡献三好学生管理员家财万贯油中2周年

    发表于 2022-10-18 21:52:44 | 显示全部楼层

    steven026 发表于 2022-10-18 15:58

    [md]建议eval
    包治百病[/md]

    听起来竟然有点靠谱

    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-7-26 08:35
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    10

    主题

    119

    帖子

    251

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    251

    活跃会员热心会员突出贡献三好学生荣誉开发者喜迎中秋

    发表于 2022-10-26 07:27:17 | 显示全部楼层

    本帖最后由 涛之雨 于 2022-10-26 07:30 编辑

    可以做成这样但是正如我介绍里说的,可以但没必要。。。
    全局unicode,可读性太差了(除非做成cli。。。。或者什么打包的脚本?)

    顺便纠正(可能是吧)一下,JScript应该是和vbs是同一个解析器吧。。。
    毕竟vbs的代码拉过来改一下就可以用(理论上)

    回复

    使用道具 举报

    发表回复

    本版积分规则

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