| 【Data URI 和 MHTML】 上面已经多次提到Data URI,详细介绍请看秦歌的“Data URI 和 MHTML”。Data URI的主要作用是以字符代替数据,从而把文件“嵌”在代码里。
 除了ie,其他浏览器基本都很好的支持了Data URI。
 ie8也有限度地支持,详细参考msdn的data Protocol。
 由于opera,safari和chrome需要remote模式的浏览器都支持Data URI,所以程序返回的是Data URI形式的数据。相比返回路径的方法,返回Data URI不需要创建文件,还少一次HTTP请求。
 ps:ie8只支持32k的Data URI数据,在ie8使用时要注意数据大小。
 在filter模式需要一个透明图片来去掉img默认显示的小图标,一般的方法需要一个图片文件。为了“省下”这个文件,可以使用Data URI来做一个1*1的透明图片:
 data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==
 支持Data URI的情况下,只要把img的src设置为这个值就可以显示一个透明图片了。 虽然ie6/7不支持Data URI,还可以用mhtml来代替。在ImagePreviewd.js开头有一段注释了的代码:
 
 Content-Type: multipart/related; boundary="_CLOUDGAMER" --_CLOUDGAMERContent-Location:blankImage
 Content-Transfer-Encoding:base64
 R0lGODlhAQABAJEAAAAAAP///////wAAACH5BAEAAAIALAAAAAABAAEAAAICVAEAOw==
 这是mhtml记录数据的形式,调用时要按以下格式设置img的src:mhtml:文件完整路径!blankImage
 其中blankImage表示要获取的数据在文件对应的Content-Location。问题在于如何获得script(js文件)的完整路径(包含http开头的路径)。
 首先要在脚本运行时获取,当前运行的script肯定是document.scripts的最后一个:
 document.scripts[document.scripts.length - 1]
 ps:document.scripts详细参考msdn的scripts Collection,ff不支持,可以用getElementsByTagName("script")兼容。
 接着可以利用getAttribute从src获取script的完整路径:
 document.scripts[document.scripts.length - 1].getAttribute("src", 4) ie6/7的getAttribute支持第二个参数,设为4表示返回完整路径的url地址,详细参考msdn的getAttribute Method。 结合Data URI 和 MHTML可以这样得到透明图片数据:  ImagePreview.TRANSPARENT = $$B.ie7 || $$B.ie6 ?"mhtml:" + document.scripts[document.scripts.length - 1].getAttribute("src", 4) + "!blankImage" :
 "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAA
 AAALAAAAAABAAEAAAICRAEAOw==";
 使用时要注意:脚本必须单独另存为一个文件,作为mhtml需要的文件路径。
 要自动获取完整路径需要用script标签链接文件。
 出处:蓝色理想
责任编辑:bluehearts
 上一页 JavaScript 图片预览效果 [7] 下一页 JavaScript 图片预览效果 [9] ◎进入论坛网页制作、WEB标准化版块参加讨论,我还想发表评论。
	      |