JavaScript 不能在 InstallShield Express 中运行?
Posted
技术标签:
【中文标题】JavaScript 不能在 InstallShield Express 中运行?【英文标题】:JavaScript cannot be run in InstallShield Express? 【发布时间】:2020-08-06 04:21:55 【问题描述】:我正在使用 InstallShield Express 创建安装项目。
我尝试在“系统更改”之前为卸载添加自定义操作。
自定义动作是一个javascript,它会打开一个窗口,如下:
window.open("https://www.example.com/", "_blank");
但是,当我尝试卸载程序时,我收到一条错误消息“Microsoft JScript Runtime Error, 'window' is not defined.
为什么?
更新:
最后我选择使用 MSI DLL 而不是脚本来解决问题。这个问题我该怎么办?谢谢。
【问题讨论】:
我不知道 install shield 是什么,但无论运行此代码的环境都不是浏览器。 as window 是浏览器提供的对象,指的是它运行的实际浏览器窗口,因此仅在浏览器环境中可用 尝试使用LaunchAppAndWait("explorer.exe", "https://www.example.com/", WAIT)
创建一个动作脚本。检查此 Q/A "how to open a web page on click of button in InstallShield?"。
nitpick:自定义操作是 JScript,而不是 JavaScript。 ECMAScript 的方言略有不同。
【参考方案1】:
NodeJS 中不存在 windows 对象。但是,如果您只是想声明一个全局变量以供以后使用,则可以在全局对象中添加 open 方法,例如:
glboal.open = function whatever(url, param2)
// does the stuff you want
;
然后你可以这样使用它:
conosle.log(global.open('https://www.example.com/','_blank'));
但我仍然不建议为此创建全局变量。在文件中创建一个函数并在需要时将其导入。全局变量会导致耦合,并使代码更难阅读。此外,此变量将存在于应用程序的整个生命周期中,如果您要制作更多变量,这可能并不好。
如果您想详细了解为什么全局变量不好:https://wiki.c2.com/?GlobalVariablesAreBad
【讨论】:
很好的答案,但不确定它是否适用或在 JScript 中有效。以上是关于JavaScript 不能在 InstallShield Express 中运行?的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 不能在 InstallShield Express 中运行?
为啥不能在对象键之后使用 Javascript 扩展运算符?