input.outerHTML=input.outerHTML.replace(/(value=\").+\"/i,"$1\"");
http://www.jb51.net/article/24872.htm
在使用<input type='file' />控件的过程中,发现一个只有IE8下才存在的BUG,有时候取文件上传的路径(value),会由类似于D:\*.*变成C:\fakepath\*.*,即真实的路径被C:\fakepath\所取代了。
这个BUG在IE8下的出现情况目前基本上确定与代码的写法有关,但具体什么情况下会出现并不清楚,IE8下并不是所有的页面都会出现这个问题。
关于这个问题的由来,网上有很多文章和帖子都指向同一个地址:http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-March/019018.html,可惜这个文章是英文的,我的英文水平有限,只能用google翻译看个大概,问题可能与Web标准有关。
目前网上有两种解决方案:
第一种,是更改用户的IE8的浏览器设置
工具 -> Internet选项 -> 安全 -> 自定义级别 -> 找到“其他”中的“将本地文件上载至服务器时包含本地目录路径”,选中“启用”即可。
第二种,在IE中使用下面的脚本函数来替换直接取控件value的操作(FireFox中使用obj.files.item(0).getAsDataURL())
function getValue(obj) {
obj.select(); //该对象选取
return document.selection.createRange().text; //返回选取项的文本内容
}
显然,对于Web开发来说,最好是不出现该Bug,如果经过测试,IE8下某个页面中的input file控件不存在该Bug,则可以不必考虑该问题。
如果存在该Bug,而且无法找到原因时,第二种解决方案是比较好的选择
第一种解决方案并不可行,不可能要求所有的用户为了访问我们的网站更改IE设置。