input[type='file']選擇圖片時,IE9及其如下版本瀏覽器報錯

 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:拒絕訪問。兩個解決方案,分別爲客戶端和服務端出路方案。跨域

1、客戶端解決方案
下降IE瀏覽器Internet的安全級別或者將有問題的網站設置爲信任站點。
下降IE瀏覽器的安全級別方法:
工具 -> Internet選項 -> 安全 -> Internet區域  -> 該區域的安全級別滑塊滑到最低

添加信任站點方法:瀏覽器

工具 -> Internet選項 -> 安全 -> 受信任站點區域 -> 站點 -> 輸入網址,點擊添加按鈕 
2、服務端解決方案
網上一番搜索以後,找到了低版本的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()報錯。
相關文章
相關標籤/搜索