使用 Javascript 读取环境变量
Posted
技术标签:
【中文标题】使用 Javascript 读取环境变量【英文标题】:Reading environment variables with Javascript 【发布时间】:2014-02-14 10:41:59 【问题描述】:我需要从客户端操作系统的环境变量中读取系统时间。我在 *** 上搜索,发现这是不可能的。但是,这些答案来自 2010 年,我想问一下自那以后是否有任何变化。
是否有可能使用某种框架?还是 javascript 仍处于沙盒状态并与操作系统断开连接?
【问题讨论】:
如果 JavaScript 可以操纵操作系统环境变量,我们都被搞砸了。 我不是想写在那里。只需阅读;> 它仍然不安全,所以你仍然不允许这样做(为什么会改变?)。阅读它们有什么用? 我猜你的意思是这个答案:Javascript environment variables?是的,如果您正在寻找在浏览器中从网站读取它们的方法,它仍然有效。 I 变量如:%TIME% %DATE% 【参考方案1】:szpic
,如果 Javascript 没有从操作系统沙箱化,任何愚蠢的犯罪分子都可以进入您的计算机并控制。允许环境变量的级别太低了,永远不允许。
看看你所有的环境变量,问问自己这个星球上的每个人是否都应该有权访问关于你计算机的所有数据。
如果您想使用 Javascript 执行此操作,则必须使用特殊的网络浏览器,例如 node-webkit。不过,它不会在任何普通的网络浏览器上运行,所以不要期望超过 0.0001% 的人会运行您的页面。
我不知道您的预期用途,但一个技巧,即投入环境变量,是为您的 Web 应用程序创建一个快捷方式,并将其作为 URL 参数包含在其中(至少在 Winblows 上)。
http://myapp.com?computername=%COMPUTERNAME%
【讨论】:
这取决于您使用的浏览器!你听说过node-webkit
吗?【参考方案2】:
javascript Date() 对象提供客户端系统时间。
【讨论】:
恕我直言,这是唯一正确的答案。即:您不需要 ENV 访问权限。 以上所有答案的目的是什么?这是一个直截了当的解决方案。【参考方案3】:FWIW.... 只是玩弄一个 .HTA 文件(是的,它使用 MSIE '引擎',所以你可能会忘记其他浏览器) 和下面的 JavaScript 读取 %TEMP%
路径变量来设置文件路径+名称,以便安全地写入临时文件。这对我来说没问题:
var oTest = new ActiveXObject("wscript.shell");
pathTest = oTest.ExpandEnvironmentStrings("%TEMP%") + "\\test_it.txt";
oTest = null;
alert(pathTest); // proves we can read %TEMP%
// and create the file, to complete the example
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var fil = oFSO.CreateTextFile(pathTest, true);
fil.WriteLine("Hello wonderful world!");
fil.Close();
【讨论】:
很抱歉撞了这么老的帖子,但最后oTest = null;
有什么特别的原因吗?它是以某种方式“释放”对象还是什么?重要吗?
就是这样。尝试有无 - 我喜欢自己整理和清理:)
在 SO:***.com/a/5835896/1661358 上找到另一个问题的答案。它可能会帮助有同样疑问的人。【参考方案4】:
今天(在撰写本文时)所有答案都已经过时了。 :)
当然,JS 仍然是沙盒化的,但这并不妨碍任何人在客户端软件中使用环境变量之类的东西。您需要了解和明智地使用的是将任何类型的数据从操作系统传输到前端应用程序。
几个前端框架可能会有所帮助。例如。使用@angular/cli 创建的 Angular 应用程序为不同环境提供了开箱即用的用例。在应用程序配置文件(例如 angular.json)中,您可以配置选项、变量、值,以及通过e.g. webpack 传输到前端应用程序中的任何内容。它们只能被读取一次,并且不能在运行时更改。
以下库 nwjs.io 尝试了一些新的东西:它允许您直接从 DOM 调用所有 Node.js 模块。
在停靠/docker 环境中,对后端和前端软件还有其他期望,这些环境的配置不同,并且从操作系统的角度来看受到了适当的限制。
【讨论】:
【参考方案5】:只有一种方法可以做到这一点 - 使用特殊的网络浏览器。像node-webkit 这样的东西。它集成了webkit引擎和node.js,所以你可以和DOM一起使用。
document.write(require('os').type());
但正如其他人所说 - 没有机会使用“普通”网络浏览器来做到这一点。
【讨论】:
【参考方案6】:这在使用 VBScript 时是可能的,但在 IE11 中删除了支持。如果您在 IE 环境中(例如内部 Intranet),则可以将 VB 代码 (CreateObject("wscript.shell")) 转换为使用 ActiveX。这将解决 VB 脚本在 IE11 Edge 模式下贬值的问题,并允许您的页面访问您的环境变量并在 Edge 模式下使用。显然这只是 IE,但如果你之前使用的是 VBScript,它也只是 IE。
var ax = new ActiveXObject("wscript.shell");
uname = ax.ExpandEnvironmentStrings("%USERNAME%");
av = null;
alert(uname);
【讨论】:
以上是关于使用 Javascript 读取环境变量的主要内容,如果未能解决你的问题,请参考以下文章