2010-06-03 12 views
25

Pracuję dodatek Firefox (który jest napisany w języku JavaScript) i trzeba określić aktualnie zalogowanego użytkownika systemu Windows. Czy jest jakiś sposób na zrobienie tego?Uzyskaj nazwę użytkownika systemu Windows w starszej wersji (nie w rozszerzeniach WebExtensions)

+0

Jest to zagrożenie dla bezpieczeństwa i dlatego nie jest narażony w javascript. Co próbujesz zrobić? –

+0

Buduję wewnętrzne rozszerzenie dla firmy i muszę sprawdzić, który użytkownik zażąda danego dokumentu. – cwhiii

+0

@duskwuff, dlaczego podbijać 7-letnie pytanie tylko dla tej edycji? Wszystko, co zrobiłeś, to zastąpienie jednego tagu w tytule innym tagiem w tytule. Znaczniki już dawały do ​​zrozumienia, że ​​chodziło o dodatek do Firefoksa. Nie było potrzeby edycji tego, aby wprowadzić tę zmianę. W rzeczywistości, jeśli chcesz uzyskać efekt pedantyczny, nie powinniśmy mieć nieintegralnych tagów w tytułach, więc "Get Windows username" byłoby bardziej odpowiednie. Czy proponujesz, abyśmy zawsze umieszczali znaczniki we wszystkich tytułach? – Makyen

Odpowiedz

5

Możesz użyć interfejsu nsIEnvironment, aby uzyskać zmienną środowiskową USERNAME.

+2

czy istnieje odpowiednik IE, który nie sprawia kłopotu z ActiveX (użytkownik jest informowany, że istnieje ryzyko bezpieczeństwa itp.) Podczas przechodzenia przez proces uzyskiwania nazwy użytkownika? – pythonian29033

-2
<html> 
<head> 
    <script language="javascript"> 
     function GetUserName() 
     { 
      var wshell = new ActiveXObject("WScript.Shell"); 
      alert(wshell.ExpandEnvironmentStrings("%USERNAME%")); 
     } 
    </script> 
</head> 
<body OnLoad="GetUserName();"> 
</body> 
</html> 
+8

ActiveX nie działa dokładnie w Firefoksie. – sdwilsh

9

To załatwia sprawę w systemie Windows:

function getUser() { 
    return Components.classes["@mozilla.org/process/environment;1"].getService(Components.interfaces.nsIEnvironment).get('USERNAME'); 
}  
+1

To rozwiązanie daje mi ten błąd'TypeError: Components.classes jest undefined', Jak myślisz, jakie rozwiązanie tego błędu? – Scar

+0

To nie działa w Firefoksie, jak pyta oryginalne pytanie. – Monkpit

+0

@Scar: O ile zrozumiałem [ten Stackoverflow-post] (http://stackoverflow.com/questions/21378058/why-components-classes-is-undefined), nie można używać Components.classes w zwykłe strony internetowe. Jest przeznaczony do użycia w rozszerzeniach/dodatkach Firefox. – Stephanie

3

następujący kod działa dla mnie zamiast zdarzenia onload z funkcji wywołującej:

var objUserInfo = new ActiveXObject("WScript.network"); 
document.write(objUserInfo.ComputerName+"<br>"); 
document.write(objUserInfo.UserDomain+"<br>"); 
document.write(objUserInfo.UserName+"<br>"); 
var uname = objUserInfo.UserName; 
alert(uname); 
+7

Pytający używa * firefox *. Ta odpowiedź używa M $ ActiveX! To nie zadziała (i nie mogę uwierzyć, że faktycznie to przetestowałem, ale zrobiłem). Właściwie istniała wtyczka ActiveX do firefox (kilka wieków temu, w czasach FF2), ale ActiveX jest teraz na liście bloków Mozilli. ([źródło] (http://kb.mozillazine.org/ActiveX)). – GitaarLAB

+0

Testowany, ale ten kod działa tylko w przeglądarce Internet Explorer i nie będzie działał w Firefoksie. Najlepszą opcją jest utworzenie ukrytej kontrolki/pola tekstowego, która do przechowywania wartości podanych z kodu (po stronie serwera), użyj javascript, aby uzyskać potrzebną wartość. Biorąc pod uwagę obecny trend, nie wszyscy używają IE do wykonywania swojej pracy. – mutanic

+0

10 przedstawiciel za problem z pokazaniem nam są dodatkowe opcje – pythonian29033

Powiązane problemy