2014-01-23 128 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