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

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

仔细观察,会发现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为主了

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

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

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

不出意外,报错了:

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

桌面双击成功运行:

脚本猫成功运行:

还不要高兴的太早!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!

奶奶的感觉自己是为了这个醋才包的饺子,有点削足适履的意思了,等以后有机会出国可以再试试
脚本demo:https://scriptcat.org/script-show-page/677