使用Javascript读取环境变量

时间:2014-01-23 17:47:55

标签: javascript environment-variables

我需要从客户端操作系统上的环境变量中读取系统时间。我在Stackoverflow上搜索,发现这是不可能的。但是,这些答案是从2010年开始的,我想问一下自那以后是否有任何改变。

是否可以使用某种框架?或Javascript仍然是沙盒并从操作系统中删除?

6 个答案:

答案 0 :(得分:14)

szpic,如果Javascript不是来自操作系统的沙盒,任何半智者都可以进入你的计算机并控制住。允许环境变量的程度太低,不允许使用。

查看您的所有环境变量,并问问自己这个星球上的每个人是否都应该可以访问有关您计算机的所有数据。


如果您想使用Javascript执行此操作,则必须使用特殊的Web浏览器,例如node-webkit。但是,它不会在任何普通的Web浏览器上运行,所以不要指望超过0.0001%的人口期望运行您的页面。


我不知道您的预期用途,但抛出一个环境变量的一个技巧是创建一个Web应用程序的快捷方式,并将其作为URL参数包含在那里(至少在Winblows上)。 / p>

http://myapp.com?computername=%COMPUTERNAME%

答案 1 :(得分:7)

javascript Date()对象为客户提供系统时间。

答案 2 :(得分:5)

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();

答案 3 :(得分:4)

只有一种方法可以做到这一点 - 使用特殊的网络浏览器。像node-webkit这样的东西。它将webkit引擎与node.js集成在一起,因此您可以将它与DOM一起使用。

document.write(require('os').type());

但正如其他人所说 - 没有机会使用“普通”网络浏览器。

答案 4 :(得分:2)

使用VBScript可以实现这一点,但在IE11中删除了支持。如果您在IE环境(例如内部Intranet)中,则可以将VB代码(CreateObject(“wscript.shell”))转换为使用ActiveX。这将解决您在IE11边缘模式下弃用VB脚本的问题,并允许您的页面访问您的环境变量并在边缘模式下使用。显然这只是IE浏览器,但如果你之前使用的是VBScript,那么它也只是IE浏览器。

var ax = new ActiveXObject("wscript.shell");
uname = ax.ExpandEnvironmentStrings("%USERNAME%");
av = null;
alert(uname);

答案 5 :(得分:1)

所有答案今天(在撰写本文时)早已过时。 :)

当然,JS仍然处于沙盒状态,但这并不能阻止任何人在客户端软件中使用诸如环境变量之类的东西。您需要知道并明智地使用的是将各种数据从操作系统传输到前端应用程序中。

几个前端框架可能会有所帮助。例如。使用@angular/cli创建的Angular应用程序提供了开箱即用的不同环境的用例。在应用程序配置文件(例如angular.json)中,您可以配置选项,变量,值,以及通过e.g. webpack传输到前端应用程序中所需的任何内容。它们只能被读取一次,并且在运行时不能更改。

以下库nwjs.io尝试了一些新的尝试:它使您可以直接从DOM调用所有Node.js模块。

在停靠/ docker环境中,对后端和前端软件还有其他期望,并且从操作系统的角度来看,这些环境的配置不同且受到适当限制。