`
swimfisher
  • 浏览: 1430 次
  • 性别: 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库...

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

    图片预览"&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来读取文件。对于图片裁剪,可能需要...

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

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

    ASP.NET 图片预览

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

    js实现的网页图片预览

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

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

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

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

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

    Android文件浏览器实现

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

    多图片预览js

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

    jquery上传图片预览插件

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

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

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

    VB制作的图片浏览器

    7. **用户交互**:除了基本的浏览功能,高级的图片浏览器可能还包括缩略图预览、图片信息显示(如尺寸、格式、创建日期等)、图片评级或标记、幻灯片播放等特性。这些功能需要编写额外的代码逻辑来实现。 8. **错误...

    Android PhotoStore图片浏览器源码.zip

    5. **图片预览和选择**:实现图片预览功能,可能涉及到Intent的使用,通过ACTION_IMAGE_CAPTURE或ACTION_PICK来打开系统相机或图库。 6. **权限管理**:由于AndroidQ对存储权限进行了限制,项目需要适配运行时权限...

    flex 图片预览

    项目提供代码可直接运行,这意味着开发者已经考虑了兼容性和性能优化,例如可能使用了polyfill来支持老版本浏览器的Flex布局,以及利用缓存和异步加载来提高图片预览的性能。 总之,“flex 图片预览”项目展示了...

    AS3图片浏览器

    4. **图片预览和导航**:为了实现图片的切换,开发者可能使用了数组或者Vector来存储图片URL,并结合事件监听器(如键盘事件或按钮点击事件)来触发图片的前后切换。在切换过程中,Loader对象的content属性会被新的...

    图片预览插件.zip

    7. **兼容性**:考虑到浏览器的多样性,图片预览插件应确保在主流浏览器(如Chrome、Firefox、Safari、Edge)上运行良好,并考虑对旧版本浏览器的支持。 8. **SEO友好**:插件应遵循SEO最佳实践,确保图片元数据...

    jsp上传图片预览

    在这个场景中,"jsp上传图片预览"是一个常见的需求,它涉及到用户在上传图片前能够在网页上预览所选的图片。这一功能不仅提升了用户体验,也减少了因上传错误图片而导致的不必要的麻烦。 首先,我们需要了解图片...

Global site tag (gtag.js) - Google Analytics