首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

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

2012-10-30 
兼容IE和firefox,获得上传文件绝对路径firefox为了浏览器安全性,不能获得上传文件绝对路径。。document.getE

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

<!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" onclick="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之类的、。。
下面简化下
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) {alert("ie");alert(fileBrowser.value);          }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("firefox");    alert( fileName);}

热点排行