我在asp.net中开发了一个web应用程序,在这个项目中有一个页面,用户应该选择图片格式的文件(jpeg,jpg,bmp,...),我想在页面中预览图像但我不想将文件发布到服务器我想在客户端处理它我已经通过文件API使用java脚本函数完成它但它只适用于IE9但是大多数客户使用IE8的原因是IE8没有支持文件API是否有任何方法可以使IE8升级或代码中的一些补丁我意味着检查浏览器是否为IE而不支持文件API调用自动将IE8升级到IE9的功能。
我不想让用户在消息中这样做我想以编程方式执行!!
即使可以安装文件API所需的特殊补丁
因为客户认为这是我的应用程序中的一个错误,他们的计算机知识很低
我应该怎么做呢?
我也使用异步文件上传Ajax控件但是它使用ajax解决方案和HTTP处理程序以任何方式将文件发布到服务器,但java脚本在客户端浏览器中完成所有操作!
以下脚本检查浏览器是否支持API
<script>
if (window.File && window.FileReader && window.FileList && window.Blob)
document.write("<b>File API supported.</b>");
else
document.write('<i>File API not supported by this browser.</i>');
</script>
以下脚本执行读取和加载图像
function readfile(e1)
{
var filename = e1.target.files[0];
var fr = new FileReader();
fr.onload = readerHandler;
fr.readAsText(filename);
}
HTML code:
<input type="file" id="getimage">
<fieldset><legend>Your image here</legend>
<div id="imgstore"></div>
</fieldset>
JavaScript代码:
<script>
function imageHandler(e2)
{
var store = document.getElementById('imgstore');
store.innerHTML='<img src="' + e2.target.result +'">';
}
function loadimage(e1)
{
var filename = e1.target.files[0];
var fr = new FileReader();
fr.onload = imageHandler;
fr.readAsDataURL(filename);
}
window.onload=function()
{
var x = document.getElementById("filebrowsed");
x.addEventListener('change', readfile, false);
var y = document.getElementById("getimage");
y.addEventListener('change', loadimage, false);
}
</script>
答案 0 :(得分:10)
您无法安装任何特殊内容,以便在IE8中添加对File API的支持。您可以做的是使用 polyfill ,以便在本机不支持它的浏览器中实现此功能。看一下HTML5 Cross Browser Polyfills的这个列表(你应该在 File API / Drag and Drop 部分找到适合你的东西)。
答案 1 :(得分:2)
经过一些研究,我得到了无法在IE8中启用文件API但是,我有一些想与你分享的东西.....
不直接,IE8不支持HTML 5。还有Canvas的插件,还有谷歌Chrome Frame,一个将HTML 5添加到早于9的IE的插件
据我所知,Google Chrome Frame是使用HTML5的完美方式
它将IE速度提高了10倍,并且它的使用非常简单,我为你们所有成员描述它...
谷歌浏览器框架
用于Internet Explorer的插件,可添加到Microsoft的浏览器,完整的HTML 5支持和Chrome的JavaScript编译器! 稳定版本于2010年9月22日发布,很多网站都在其页面中添加了代码。
此插件适用于Internet Explorer 6,7及更高版本。谷歌希望打破阻碍网络发展的障碍:最常见的浏览器以及缺乏与新标准的兼容性。
当识别出来时,Internet Explorer将在Chrome和Safari的渲染引擎WebKit下运行,如果使用IE解释器,它将使用超快的JavaScript编译器代替。
此插件的优势非常适合Web应用程序的兼容性,并且对于Webkit中集成的WebGL将变得更加有用,这使得我们可以在浏览器上使用3D应用程序:一个非常不同的Web! 自3.7版本以来,Firefox也支持WebGL。
自2011年5月起,该插件可以在没有管理员权限的情况下安装,因此在旧版本的IE中安装并且无法更新。
网页代码中的标记将显示一条消息,提示用户下载插件。安装完成后,IE将以Chrome格式运行,并支持HTML 5。
框架的特征
离线模式。 和标签。微软还计划在IE中实现它们。 帆布。 WebGL的。 CSS 3。 JavaScript编译器。 酸性3级的相容性。 见vidéo。
Microsoft的反应
我们原本以为微软并没有真正意识到这个促进HTML 5的举措不利于他们自己的解决方案Silverlight。该公司强调了一个安全问题:
考虑到一般插件和特别是谷歌浏览器的安全问题,作为插件运行的谷歌Chrome Frame使恶意软件和恶意脚本的攻击区域翻了一番。
**
Chrome Frame。自动安装。 - &GT; http://www.google.com/chromeframe/?quickenable=true
谷歌浏览器 帧代码。 - &GT; https://developers.google.com/chrome/chrome-frame/
Chrome框架:开发人员指南。 - &GT; http://www.chromium.org/developers/how-tos/chrome-frame-getting-started
**
答案 2 :(得分:2)
这适用于我在IE10之前,我使用https://github.com/eligrey/FileSaver.js用于其他所有浏览器,请注意,虽然这样做并不完美,因为它是IE,你知道我的意思吗? / p>
希望这有帮助
/**
* saves File, pops up a built in javascript file as a download
* @param {String} filename, eg doc.csv
* @param {String} filecontent eg "this","is","csv"
* @param {String} mimetype eg "text/plain"
*/
function saveAs (filename, filecontent, mimetype) {
var w = window.open();
var doc = w.document;
doc.open( mimetype,'replace');
doc.charset = "utf-8";
doc.write(filecontent);
doc.close();
doc.execCommand("SaveAs", null, filename);
}