如何在 JavaScript 中检测应用程序是否在电子框架内运行?
window && window.process && window.process.type
还有process.versions['electron']
。
如果我们在没有节点集成的情况下运行流程怎么办? 我想到目前为止我一直在转发 navigator.userAgent ,有没有更好的方法呢?
似乎这已被合并,但我注意到这个项目为它提供了一个很好的功能,而不是直接在代码中使用条件子句: https ://github.com/cheton/is-electron
我一直对使用window && window.process && window.process.type
来检测我们是否在 Electron 中运行有点不满意,因为它非常模糊,很容易被不是 Electron 的东西使用。
由于电子在用户代理中显示,我建议执行以下操作(在 1.7.5 中测试工作):
var userAgent = navigator.userAgent.toLowerCase();
if (userAgent.indexOf(' electron/') > -1) {
// Electron-specific code
}
此外,您的应用程序名称显示在用户代理字符串中,如果您有应用程序不同变体的代码,这将很有帮助。
有关信息:
前两种方法对我不起作用,但@richjeffery的方法工作正常。 自2015 年以来,情况可能发生了变化。
不建议使用window.process
。 下面推理。
<webview>
中不可用<iframe>
中不可用IMO 我们都应该使用@richjeffery的解决方案,或者 Electron 团队应该为所有上下文提供一个全局属性以进行不可欺骗的检测。
在@zcbenz建议之后,这 3 个对我有用:
if (process.versions.hasOwnProperty('electron')) {
// Electron specific code
}else{
}
```JavaScript
if (typeof (process.versions.electron) === 'string') {
// 电子特定代码
}别的{
}
```JavaScript
var WHY = (process.versions.hasOwnProperty('electron')) ? /*expression for Electron*/ : /*other expression*/;`
但是我可以看到navigator.userAgent
与 @richjeffery 提出的 Electron 应用程序名称相结合的优势。
+1 全局属性
只是为了澄清那些刚刚发现这一点的人:上面的讨论没有提到该方法是否适用于主脚本或渲染器脚本。
对于主脚本,它们作为 Node 进程运行,因此请使用process.versions.hasOwnProperty('electron')
或等效的
对于渲染器脚本,它们在浏览器中运行,因此请使用/electron/i.test(navigator.userAgent)
或等效的
最有用的评论
我一直对使用
window && window.process && window.process.type
来检测我们是否在 Electron 中运行有点不满意,因为它非常模糊,很容易被不是 Electron 的东西使用。由于电子在用户代理中显示,我建议执行以下操作(在 1.7.5 中测试工作):
此外,您的应用程序名称显示在用户代理字符串中,如果您有应用程序不同变体的代码,这将很有帮助。