2011-06-24 36 views
0

我在Firefox上運行此,上鍊接點擊時,火狐說NS_ERROR_FILE_UNRECOGNIZED_PATH wheread我跟着從這裏How to open .EXE with Javascript/XPCOM as Windows "Run..."?運行埃克在Firefox爲什麼我得到一個錯誤

<html> 
<head> 
<script> 
function RunExe(path) { 
    try {    
     var ua = navigator.userAgent.toLowerCase(); 
     if (ua.indexOf("msie") != -1) { 
      MyObject = new ActiveXObject("WScript.Shell") 
      MyObject.Run(path); 
     } else { 
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 

      var exe = window.Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile); 
      exe.initWithPath(path); 
      var run = window.Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess); 
      run.init(exe); 
      var parameters = [""]; 
      run.run(false, parameters, parameters.length); 
     } 
    } catch (ex) { 
     alert(ex.toString()); 
    } 
} 
</script> 
</head> 
<body> 
<a href="#" onclick="javascript:RunExe('C:\Windows\System32\cmd.exe /c start winword.exe');">Open Word</a> 
</body> 
+1

我希望這個代碼不能在任何理智的瀏覽器中工作,即使這個html存儲在本地。 – CodesInChaos

+0

Firefox警告用戶之前:) –

回答

2

在javascript中的文字指令,反斜槓表示轉義序列的開始。如果您確實想要表示反斜槓,則可以使用雙反斜槓進行轉義。

即 'C:\\的Windows \\ System32下\\ cmd.exe的/C啓動WINWORD.EXE'

http://www.javascriptkit.com/jsref/escapesequence.shtml

編輯: 從從正確答案的評論你張貼鏈接,它看起來像他得到的方式,它的工作是:

只能傳遞路徑runexe: 的javascript:runExe( 'C:\ WINDOWS \ SYSTEM32 \ cmd.exe的')

設置params等於命令參數: var parameters = [「/ c start winword.exe」];

所以這在理論上的工作:

<html> 
<head> 
<script> 
function RunExe(path) { 
    try {    
     var ua = navigator.userAgent.toLowerCase(); 
     if (ua.indexOf("msie") != -1) { 
      MyObject = new ActiveXObject("WScript.Shell") 
      MyObject.Run(path); 
     } else { 
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 

      var exe = window.Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile); 
      exe.initWithPath(path); 
      var run = window.Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess); 
      run.init(exe); 
      var parameters = ["/c start winword.exe"]; 
      run.run(false, parameters, parameters.length); 
     } 
    } catch (ex) { 
     alert(ex.toString()); 
    } 
} 
</script> 
</head> 
<body> 
<a href="#" onclick="javascript:RunExe('C:\\Windows\\System32\\cmd.exe');">Open Word</a> 
</body> 

雖然清楚這將是更好的PARAMS通過作爲比他們硬編碼,因爲我在這裏所做的參數(或將它們作爲部分路徑和解析出來)

+0

如果他使用單引號,這仍然是真的嗎? –

+0

@Amir是的,雙引號或單引號是相同的。 – heisenberg

+0

http://jsfiddle.net/d4ePj/1/ – heisenberg

相關問題