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 中滚动循环?

JavaScript 不能在 InstallShield Express 中运行?

为啥不能在对象键之后使用 Javascript 扩展运算符?

JavaScript 可以在计算机上执行,但不能在 iPad 上执行

请问javascript中能不能有SQL语句?

解决JavaScript的属性innerHTML不能在页面交互时输出的问题(转载)