input[type='file']选择图片时,IE9及其以下版本浏览器报错

本文介绍了在低版本IE浏览器中上传图片时遇到的问题及解决方案,包括客户端和服务器端的方法,旨在帮助开发者解决此类常见技术难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 var obj = upfile.value
 2 obj.select();
 3 var imgSrc = document.selection.createRange().text; 
 4 var localImagId = document.getElementById("localImag"); //必须设置初始大小 
 5 try{ //IE滤镜
 6      localImagId.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
 7     localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc; 
 8 } catch(e) {
 9     alert("您上传的图片格式不正确,请重新选择!"); 
10     return false; 
11 } 

低版本浏览器报错,显示var imgSrc = document.selection.createRange().text; 这一行有错误。控制台显示错误为:SCRIPT5:拒绝访问。两个解决方案,分别为客户端和服务端出路方案。

一、客户端解决方案
降低IE浏览器Internet的安全级别或者将有问题的网站设置为信任站点。
降低IE浏览器的安全级别方法:
工具 -> Internet选项 -> 安全 -> Internet区域  -> 该区域的安全级别滑块滑到最低

添加信任站点方法:

工具 -> Internet选项 -> 安全 -> 受信任站点区域 -> 站点 -> 输入网址,点击添加按钮 
二、服务端解决方案
网上一番搜索之后,找到了低版本的IE造成这个问题的原因:
在IE9下,如果file控件获得焦点,则document.selection.createRange()拒绝访问。
针对这个原因,可在document.selection.createRange()方法前使file控件失去焦点即可。因此,也有两个方案可选。
方案1:直接使file控件失去焦点
针对本人的代码,可做如下修改
1 var obj = upfile.value
2 obj.select();
3 obj.blur(); //使file控件失去焦点
4 var imgSrc = document.selection.createRange().text; 

方案2:使其他DOM元素获得焦点

1 var obj = upfile.value
2 obj.select();
3 OtherDOM.focus(); // 使其他元素获得焦点
4 var imgSrc = document.selection.createRange().text; 

上述两个方案,方案2适用性较好。原因来自网络,本人尚未验证。

因为当网页中存在iframe框架时,会导致跨域的问题,致使obj.blur()报错。

 

转载于:https://www.cnblogs.com/code-ten/p/5336409.html

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>文章列表</title> <link rel="stylesheet" href="js/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="css/reset.css"> <link rel="stylesheet" href="css/iconfont.css"> <link rel="stylesheet" href="css/main.css"> <link type="text/css" rel="stylesheet" href="js/jedate/css/jedate.css"> <script src="js/jquery-1.12.4.min.js"></script> <script src="js/jedate/js/jedate.js"></script> <script src="js/tinymce/js/tinymce/tinymce.min.js"></script> <script src="js/tinymce/js/tinymce_setup.js"></script> <script src="axios.min.js"></script> </head> <body> <div class="container-fluid"> <div class="common_title"> 文章编辑 </div> <div class="container-fluid common_con"> <form class="form-horizontal article_form"> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">文章标题:</label> <div class="col-sm-10"> <input type="text" name="title" class="form-control title" id="inputEmail3" value="文章标题文字"> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-2 control-label">文章封面:</label> <div class="col-sm-10"> <img src=" " class="article_cover"> <input name="cover" type="file" id="exampleInputFile"> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">文章类别:</label> <div class="col-sm-4"> <select class="form-control category" name="categoryId" id="article_category"> </select> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">发布时间:</label> <div class="col-sm-4"> <div class="input-group"> <input type="text" name="date" class="form-control" value="2019-05-17" id="dateinput"> <span class="input-group-btn"> <button class="btn btn-default" type="button" onclick="jeDate(&#39;#dateinput&#39;,{trigger:false,format: &#39;YYYY-MM-DD&#39;})"><i class="iconfont icon-icondate"></i></button> </span> </div> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">文章内容:</label> <div class="col-sm-10"> <textarea id="rich_content" name="content" class="form-control" placeholder="文章内容">文章内容</textarea> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-success btn-edit">修改</button> </div> </div> </form> </div> </div> <!-- 引入一个模板引擎js文件 --> <script src="./js/template-web.js"></script> <!-- 准备一个 文章分类 模板 --> <script id="cateList" type="text/html"> {{each data v}} <option value=&#39;{{v.id}}&#39;>{{v.name}}</option> {{/each}} </script> <script> // 入口函数 $(function () { const instance = axios.create({ baseURL: &#39;http://139.196.82.122:8080/api/v1&#39;, timeout: 5000, headers: { &#39;Content-Type&#39;: &#39;application/x-www-form-urlencoded&#39;, "Authorization": localStorage.getItem("token"), } }); // 获取文章列表 async function getId() { const id = window.location.search.split("=")[1]; if (id) { const { data } = await instance.get(`admin/article/search?id=${id}`); if (data.code === 200) { const { title, cover, categoryId, date, content } = data.data; $("#inputEmail3").val(title); $(".article_cover").attr("src", cover); $(".category").val(categoryId); $("#dateinput").val(date); tinyMCE.get(&#39;rich_content&#39;).setContent(content); } else { alert("获取文章列表错误"); } } } getId(); async function getCategoryList() { const { data } = await instance.get("admin/category/list"); if (data.code == 200) { $(&#39;#article_category&#39;).html( data.data.map((element) => { return `<option value="${element.id}">${element.name}</option>` }) ) } else { alert("获取列表类别错误"); } }; getCategoryList(); $(&#39;#exampleInputFile&#39;).change(function () { let icon = this.files[0]; let url = URL.createObjectURL(icon); $(this).prev().attr(&#39;src&#39;, url); }); $(&#39;.btn-edit&#39;).click(async function (event) { event.preventDefault(); const formData = new FormData($(&#39;form&#39;)[0]); formData.append(&#39;content&#39;, tinyMCE.activeEditor.getContent()); formData.append(&#39;state&#39;, "已发布"); let { data } = await axios.post(&#39;http://139.196.82.122:8080/api/v1/admin/article/edit&#39;, formData, { headers: { Authorization: localStorage.getItem("token"), } }); if (data.code == 200) { alert("修改成功"); window.location.href = "article_list.html"; } }); }); </script> </body> </html>为什么报错
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值