2014-01-23 210 views
19

我需要从客户端OS上的环境变量中读取系统时间。我搜索了Stackoverflow,发现这是不可能的。但是,这些答案是从2010年开始的,我想问一下自那以后有什么变化。用Javascript读取环境变量

它可能与某种框架?或者JavaScript仍然是沙箱,并从操作系统切断?

+4

如果JavaScript可以操作OS环境变量,我们都会被搞砸。 –

+1

我不是故意在那里写的。刚刚阅读;> – szpic

+0

它仍然不安全,所以你仍然不允许这样做(为什么它会改变?)。你需要读什么? – Bergi

回答

11

​​,如果Javascript没有被操作系统从沙箱中清理出来,任何机智的犯罪分子都可能进入你的计算机并控制它。允许环境变量的程度太低,以至于不允许。

看看你的所有环境变量,并问问自己,如果地球上的每个人都应该有权访问有关计算机的所有数据。


如果你想用JavaScript来做到这一点,你必须用一种特殊的Web浏览器,如node-webkit。但是,它不会在任何普通的Web浏览器上运行,所以不要期望有超过0.0001%的人希望运行你的页面。


我不知道你的用途,但一个招,在一个环境变量来,就是要建立一个快捷方式到你的Web应用程序,并将其包含在那里作为一个URL参数(至少在Winblows)。

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

这取决于您使用的浏览器!你有没有听说过'node-webkit'? –

+0

好点,@AreWojciechowski。我纠正了自己。 – dthree

3

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

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

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

5

FWIW ....只是与.HTA文件(是的,它使用MSIE“引擎”,所以你可能忘了其他浏览器)玩弄和下面的JavaScript读取%TEMP%路径变量设置用于安全编写临时文件的filepath +名称。这适用于我:

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

对不起,碰到这样一个旧帖子,但最后是否有'oTest = null;'有任何特殊原因?它是以某种方式“释放”物体或某物?是不是重要? – rmobis

+0

这就是主意。尝试它与否 - 我喜欢保持事情整洁,并在自己后清除:) –

+1

在SO上的另一个问题找到了这个答案:http://stackoverflow.com/a/5835896/1661358。它可能会帮助有同样怀疑的人。 – rmobis

1

这是可能的使用VBScript,但在IE11中删除支持。如果您处于IE环境(如内部Intranet),则可以将VB代码(CreateObject(“wscript.shell”))转换为使用ActiveX代替。这将解决VBScript在IE11 Edge模式下折旧的问题,并允许您的页面访问您的环境变量并在Edge模式下使用。显然,这只是IE浏览器,但如果你在使用VBScript之前,它也只是IE浏览器。

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

javascript Date()Object提供客户端系统时间。

+0

并且是唯一正确的答案恕我直言。即:你不需要ENV访问。 – user1863152