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

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

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

    [LV.5]常住居民I

    18

    主题

    17

    回帖

    274

    积分

    助理工程师

    积分
    274

    生态建设者荣誉开发者新人报道喜迎中秋油中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的每日心情
    郁闷
    9 小时前
  • 签到天数: 203 天

    [LV.7]常住居民III

    264

    主题

    3221

    回帖

    3401

    积分

    管理员

    积分
    3401

    生态建设者荣誉开发者管理员油中2周年家财万贯

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

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

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-30 08:28
  • 签到天数: 157 天

    [LV.7]常住居民III

    7

    主题

    68

    回帖

    176

    积分

    荣誉开发者

    积分
    176

    新人报道荣誉开发者喜迎中秋油中2周年

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

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

    使用道具 举报

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

    [LV.9]以坛为家II

    24

    主题

    460

    回帖

    1182

    积分

    荣誉开发者

    积分
    1182

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

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

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

    ++(奇怪的知识);
    QAQ

    建议eval
    包治百病

    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    9 小时前
  • 签到天数: 203 天

    [LV.7]常住居民III

    264

    主题

    3221

    回帖

    3401

    积分

    管理员

    积分
    3401

    生态建设者荣誉开发者管理员油中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

    15

    主题

    141

    回帖

    292

    积分

    荣誉开发者

    积分
    292

    荣誉开发者喜迎中秋

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

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

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

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

    回复

    使用道具 举报

    发表回复

    本版积分规则

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