`
swimfisher
  • 浏览: 1446 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

新版本瀏覽器中如何實現圖片預覽功能

阅读更多
最近在项目中遇到一个比较棘手的问题:
在较新版本的浏览器 ( Firefox3,  IE8, IE7(IE8模拟) ) 中无法获取file input的完整value,我們先看下測試的結果。

Firefox 2.x, IE6, IE7
    在本地及远端都可以取得完整地址(包括路径及文件名)

Firefox 3.0
    在本地及远端都不能取得完整地址,只能获得文件名

IE8, IE7(IE8模拟)
    在本地可以取得完整地址(包括路径及文件名),在远端不能取得完整地址,只能获得文件名

我們從上面的測試信息中看到在新版本的瀏覽器中在遠端均沒有辦法獲得完整的地址,那有沒有辦法可以解決這個問題呢,我們往下看。

如何在Firefox3下取得完整路径

第一步:打开“about:config”页面,查找“signed.applets.codebase_principal_support”属性,将其值设置为true。

第二步:在javascript中采用以下代码进行获取:
function getValueFF(id){
    var ip = document.getElementById(id);
    if (ip.files) {
        //ffx3 - try to have access to full path
        try {
            netscape.security.PrivilegeManager.enablePrivilege( 'UniversalFileRead' )
        }
        catch (err) {
            //need to set signed.applets.codebase_principal_support to true
        }
    };
    return ip.value;
}


如何在IE8下取得完整路径

方法一:使用selection.createRange
function getValueIE8(id){
    var ip = document.getElementById(id);
    ip.select();
    return document.selection.createRange().text;
}


方法二:引用:https://bugzilla.mozilla.org/attachment.cgi?id=328849

在上面我們看到了出現的問題,原因可能是處於對安全性的考量,新版本的瀏覽器對訪問客戶端內容設置了較高的權限。雖然現在有變相的 “解決辦法”,但都需要用戶在訪問頁面的時候,額外的進行瀏覽器的安全設置(允許Javascript腳本訪問更多的本地內容),否則單靠 Javascript還是無法直接進行訪問。這就意味這我沒有辦法像以前那樣去直接調用file input的value來進行圖片的預覽。

那我們是不是有別的什麽辦法來進行圖片的預覽呢?繼續往下看。

在新版本的瀏覽器中有提供nsIDOMFile這樣一個接口,它提供了三個方法可以使用,分別是:

        * DOMString getAsBinary();
        * DOMString getAsDataURL();
        * DOMString getAsText(in DOMString encoding);

詳細的資料看這裡:https://developer.mozilla.org/en/NsIDOMFile

我們這裡就是要使用getAsDataURL()這個方法,這個方法會返回一個data: URL類型的DOMString,它的內容就是文件經過編碼后的數據了。

好,下面讓我來看下例子吧

<!doctype html public "-//w3c//dtd html 4.01//en" "http://www.w3.org/tr/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>New file input tester.</title>
</head>
<body>
<input id="myfile" type="file" />
<br />
<img src="" alt="Image to be upload." />
<div id="info"></div>
<script type="text/javascript">
var dFile = document.getElementById('myfile');
var dImg = document.getElementsByTagName('img')[0];
var dInfo = document.getElementById('info');
dFile.onchange = function(){
	if(!dFile.value.match(/.jpg|.gif|.png|.bmp/i)){alert('File type must be: .jpg, .gif, .bmp or .png !');return;}
	if(dFile.files){
		dImg.src = dFile.files[0].getAsDataURL();
	}else if(dFile.value.indexOf('\\') > -1 || dFile.value.indexOf('\/') > -1){
		dImg.src = dFile.value;
	}
}
</script>
</body>
</html>


這樣我們就可以在新版本的瀏覽器里進行圖片的預覽了,如果你有更好的方法也可以共同分享一下。

注意:在ie7下不能使用img.src這樣的方式來進行圖片預覽,需要使用濾鏡實現!
分享到:
评论

相关推荐

    上传图片预览插件,jquery插件,支持多种浏览器

    在IT行业中,尤其是在网页开发领域,用户界面的交互体验至关重要,而图片预览功能就是其中不可或缺的一部分。"上传图片预览插件,jquery插件,支持多种浏览器"这个标题所涉及的知识点,主要集中在前端开发的jQuery库...

    JAVA_jsp任意浏览器的图片上传预览

    首先,让我们理解为何直接在前端实现跨浏览器的本地图片预览功能几乎不可能。不同的浏览器,如Internet Explorer(IE)、Firefox、Safari、Opera和Chrome,由于其渲染引擎和API支持的差异,对本地文件操作的支持各不...

    图片上传预览(兼容所有主流浏览器)

    图片预览"&gt; ``` ```javascript document.getElementById('imageInput').addEventListener('change', function(e) { var file = e.target.files[0]; if (file.type.startsWith('image/')) { var reader = new ...

    上传文件前,本地预览图片功能,支持所有主流浏览器

    在本主题中,我们将深入探讨如何实现"上传文件前,本地预览图片功能,支持所有主流浏览器"。 首先,我们需要了解这个功能的核心技术——HTML5的File API。File API提供了在浏览器中读取、操作和处理文件的能力,这...

    js前端图片预览插件

    综上所述,这个JavaScript前端图片预览插件利用Canvas技术,为用户提供了一套完整的图片预览解决方案,它不仅提供了基本的预览功能,还考虑了实际应用中的部署和性能问题。通过学习和运用这类插件,开发者可以更好地...

    jquery图片预览与裁剪

    关于兼容性,由于IE6至9等旧版本浏览器对HTML5新特性支持不足,实现图片预览和裁剪功能时需要额外的工作。例如,IE6到IE9不支持FileReader API,因此可能需要使用ActiveXObject来读取文件。对于图片裁剪,可能需要...

    ASP.NET 图片预览

    综上所述,ASP.NET图片预览功能的实现涉及客户端与服务器端的交互,需要掌握HTML5的File API、ASP.NET的文件上传机制以及跨浏览器的兼容性处理。通过合理的设计和实现,我们可以为用户提供一个高效且兼容性良好的...

    FTP实现图片预览缩略图.docx

    5. **开启图片预览**:在Serv-U的配置选项中,找到“高级”&gt;“Web浏览器预览”,启用此功能。这样,当用户通过FTP客户端连接时,可以在浏览器中直接预览图片,而无需下载整个文件。 6. **客户端设置**:用户需要使用...

    flex图片上传功能,包括图片预览

    标题中的“flex图片上传功能,包括图片预览”是指使用Adobe Flex技术实现的图片上传和预览功能。Flex是基于ActionScript(AS)3.0的开放源代码框架,主要用于构建富互联网应用程序(RIA)。这一功能允许用户在Web...

    jQuery实现上传图片预览

    ### jQuery实现上传图片预览 在现代Web开发中,用户交互体验是提升网站吸引力的关键因素之一。其中,图片上传预览功能是许多应用场景中的一个重要环节,例如社交媒体、在线购物平台等。通过使用jQuery库,我们可以...

    js实现的网页图片预览

    本篇文章将详细探讨如何使用JavaScript实现本地及客户端图片预览,并提供一个支持图片比例缩放和清空背景的功能,同时兼容IE8浏览器。 首先,我们需要理解JavaScript如何访问和操作HTML中的元素。在HTML中,我们...

    jquery 调用浏览器打印功能

    它会检测到新版本中移除或者改变的功能,并提供相应的警告或修复。 接下来,我们引入 `jquery.jqprint-0.3.js` 文件,这是 jqPrint 插件的核心代码。该插件提供了 `$.fn.jqprint` 方法,使得我们可以方便地调用 ...

    纯 js 实现得 图片上传预览插件

    综上所述,这个纯JS实现的图片上传预览插件利用了HTML5的File API和FileReader API,结合原生JavaScript的DOM操作和事件监听,实现了用户友好的图片预览功能。开发者可以根据实际需求进行定制,比如增加图片裁剪、...

    WPF 结合DsoFramer嵌入Office, 操作word, excel内容,嵌入浏览器 预览html

    在本文中,我们将深入探讨如何在C#的WPF(Windows Presentation Foundation)应用程序中结合DsoFramer控件来嵌入并操作Office应用程序,包括Word和Excel文档,以及如何嵌入浏览器来预览HTML页面。这是一套强大的技术...

    Android文件浏览器实现

    - 加载文件预览(图片、音频、视频等) ### 7. FileExplorerDemo项目结构 `FileExplorerDemo`可能包含以下几个关键部分: - `MainActivity.java`:主界面,负责初始化ListView和适配器 - `FileListAdapter.java`:...

    JS图片预览(兼容IE6、IE7、IE8和FF)

    通过分析这个库的源代码,我们可以学习到更多关于跨浏览器图片预览的技巧和最佳实践。 总之,实现JS图片预览并兼容旧版IE的关键在于理解和利用这些浏览器的特性和限制,采用适当的事件处理机制,以及有效地预加载和...

    多图片预览js

    在网页开发中,多图片预览功能是必不可少的,尤其在涉及到用户上传图片的场景,如社交媒体、电商平台等。这个“多图片预览js”功能就是利用JavaScript编写的一种技术,它允许用户在上传图片之前先进行预览,提高用户...

    jquery上传图片预览插件

    本文将深入探讨“jQuery上传图片预览插件”,这是一个实用的工具,旨在提升用户在网页上上传图片时的体验。该插件在浏览器中提供了图片的实时预览功能,尤其在处理图片大小调整和等比例缩放方面表现卓越,同时兼容...

    FTP实现图片预览缩略图.pdf

    本文将详细介绍如何使用Serv-U FTP服务器软件实现图片预览和缩略图功能。 Serv-U是一款强大的FTP服务器软件,提供了丰富的管理和自定义选项,包括支持HTTP预览。以下是如何在Serv-U 10.3版本中设置图片预览缩略图的...

    vue组件js图片查看点击预览大图并下载高清大图到本地

    这个名为"vue组件js图片查看点击预览大图并下载高清大图到本地"的项目,是基于Vue 2.5.2版本实现的,它专注于为PC端用户提供图片预览和下载功能,但不支持IE浏览器。下面我们将详细探讨实现这些功能的关键知识点。 ...

Global site tag (gtag.js) - Google Analytics