兼容IE和firefox,获得上传文件绝对路径

  firefox为了浏览器安全性,不能获得上传文件绝对路径。。document.getElementById('file').value获得的是文件名
在ie里获得的却是绝对路径

Java代码
  1. <!doctype html>   
  2. <script>   
  3. function readFile(fileBrowser) {   
  4.     if (navigator.userAgent.indexOf("MSIE") != -1) {   
  5.         return getFilePath(fileBrowser);   
  6.     } else if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Mozilla") != -1) {   
  7.         return getFilePathWithFF(fileBrowser);   
  8.     } else {   
  9.         return;   
  10.     }   
  11. }   
  12. function getFilePath(fileBrowser) {   
  13.     if (navigator.userAgent.indexOf("MSIE") != -1) {   
  14.         fileBrowser.select();   
  15.         return document.selection.createRange().text;   
  16.     } else if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Mozilla") != -1)    
  17. return this.getFilePathWithFF(fileBrowser);   
  18.     else alert("Not IE or Firefox (userAgent=" + navigator.userAgent + ")");   
  19. };   
  20. function getFilePathWithFF(fileBrowser) {   
  21.     try {   
  22.         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");   
  23.     } catch(e) {   
  24.         alert('由于浏览器安全问题 请按照以下设置 [1] 地址栏输入 "about:config" ;[2] 右键 新建 -> 布尔值 ; [3] 输入 "signed.applets.codebase_principal_support" (忽略引号).');   
  25.         return;   
  26.     }   
  27.     var fileName = fileBrowser.value;   
  28.     alert(fileName );   
  29.     var file = Components.classes["@mozilla.org/file   /local;1"].createInstance(Components.interfaces.nsILocalFile);   
  30.     try { // Back slashes for windows   
  31.         file.initWithPath(fileName.replace(/\//g, "\\\\"));   
  32.     } catch(e) {   
  33.         if (e.result != Components.results.NS_ERROR_FILE_UNRECOGNIZED_PATH)   
  34.            throw e;   
  35.         alert("File '" + fileName + "'cannot be loaded: relative paths    
  36.         are not allowed. Please provide an absolute path to this file.");   
  37.         return;   
  38.     }   
  39. alert(file.path);   
  40.     return file.path;   
  41. }   
  42. </script>   
  43. <html>   
  44.     <head>   
  45.         <meta charset="gbk">         
  46.     </head>   
  47.     <body>   
  48. <input type="file" id="file"></input>    
  49. <input type="button" οnclick="readFile(document.getElementById('file'))" value="上传"></input>    
  50.            
  51. </body>   
  52. </html>  
<!doctype html>
<script>
function readFile(fileBrowser) {
    if (navigator.userAgent.indexOf("MSIE") != -1) {
        return getFilePath(fileBrowser);
    } else if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Mozilla") != -1) {
        return getFilePathWithFF(fileBrowser);
    } else {
        return;
    }
}
function getFilePath(fileBrowser) {
    if (navigator.userAgent.indexOf("MSIE") != -1) {
        fileBrowser.select();
        return document.selection.createRange().text;
    } else if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Mozilla") != -1) 
return this.getFilePathWithFF(fileBrowser);
    else alert("Not IE or Firefox (userAgent=" + navigator.userAgent + ")");
};
function getFilePathWithFF(fileBrowser) {
    try {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    } catch(e) {
        alert('由于浏览器安全问题 请按照以下设置 [1] 地址栏输入 "about:config" ;[2] 右键 新建 -> 布尔值 ; [3] 输入 "signed.applets.codebase_principal_support" (忽略引号).');
        return;
    }
    var fileName = fileBrowser.value;
    alert(fileName );
    var file = Components.classes["@mozilla.org/file   /local;1"].createInstance(Components.interfaces.nsILocalFile);
    try { // Back slashes for windows
        file.initWithPath(fileName.replace(/\//g, "\\\\"));
    } catch(e) {
        if (e.result != Components.results.NS_ERROR_FILE_UNRECOGNIZED_PATH)
           throw e;
        alert("File '" + fileName + "'cannot be loaded: relative paths 
        are not allowed. Please provide an absolute path to this file.");
        return;
    }
alert(file.path);
    return file.path;
}
</script>
<html>
	<head>
		<meta charset="gbk">      
	</head>
	<body>
<input type="file" id="file"></input> 
<input type="button" οnclick="readFile(document.getElementById('file'))" value="上传"></input> 
        
</body>
</html>


document.selection只有IE支持,
window.getSelection()也只有FireFox和Safari支持,都不是标准语法。

注解
火狐
用window.getSelection().toString()可以获取到选中的文本,但是(input标签的)文本框无效。(所以上面不能用这种方法获得值)
但可以在触发input相应事件时,访问document.activeElement获得活动的组件,再用value获得值。。。(type=file时无效)
ie用MyInput.document.selection.createRange().text可以获取到文本框的文本
之前必须调用myInput.select()

上面的一些方法和属性不太标准的用法、、像selection之类的、。。
下面简化下
Java代码
  1. function readFile(fileBrowser) {   
  2.     if (navigator.userAgent.indexOf("MSIE") != -1) {   
  3.         return getFilePath(fileBrowser);   
  4.     } else if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Mozilla") != -1) {   
  5.         return getFilePathWithFF(fileBrowser);   
  6.     } else {   
  7.         return;   
  8.     }   
  9. }   
  10. function getFilePath(fileBrowser) {   
  11.     alert("ie");   
  12.     alert(fileBrowser.value);   
  13.          
  14.        
  15. }   
  16. function getFilePathWithFF(fileBrowser) {   
  17.     try {   
  18.         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");   
  19.     } catch(e) {   
  20.         alert('由于浏览器安全问题 请按照以下设置 [1] 地址栏输入 "about:config" ; [2] 右键 新建 -> 布尔值 ; [3] 输入 "signed.applets.codebase_principal_support" (忽略引号).');   
  21.         return;   
  22.     }   
  23.     var fileName = fileBrowser.value;   
  24.     alert("firefox");   
  25.     alert( fileName);   
  26. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值