我觉得可能行不通。mht之所以可以把图片编码到文件内部,它在IE打开mht的时候,其实有个过程,就是把文件中的图片解码到临时文件夹中,这个过程,IE可以帮mht来做,但是不知道它使用什么关键字来标识的,想借它这招,暂时没有成功。
另外,把我们的网页和图片做成单一文件mht后,你打开这个文件,在图片上另存到磁盘中,你会发现,图片变成bmp格式了,无论你原来的图片是什么格式的。这个更加说明,它是经过了IE加工后显示的,并非简单的decode64解码,否则我编码前是jpg格式,编码后的文本和我自己编码的文本一样的,但是mht解码出来就变成bmp了,说明并非简单的decode过程,肯定不可能通过javascript/vbscript这种简单脚本语言实现jpg到bmp转换。说明——仿照mht做法行不通,那是人家IE的小伎俩。
刚才提到,用xml文件方法行得通,后来又有新收货,xml可以直接写到html文件中的(以前没有研究过xml,现在才知道,见笑了),MSDN中有这么一段:
Michael Wallent
Microsoft Corporation
November 1, 1999
Many times in this space, I've talked about how to use data binding with Internet Explorer. I get more questions about this feature than any other from users who are building industrial-strength applications. There are two powerful aspects of data binding that I haven't really talked about before: hierarchy and data updating.
Hierarchical data binding allows easy display of nested content. For example, you want to show a list of customers, but under each customer you want to show all their open orders. With the advent of XML Data, more and more information is deeply nested and requires hierarchy to display the content properly.
Here's an example of the simple "Customer has Orders" style of data display.
Here's the code:
<html>
<head>
<xml id=Simple>
<?xml version="1.0" ?>
<ROOT>
<customer name="Joe Smith">
<order description="Toys"/>
<order description="Groceries"/>
<order description="Electronics"/>
</customer>
<customer name="Harry Johnson">
<order description="Books"/>
<order description="Posters"/>
</customer>
</ROOT>
</xml>
</head>
<body>
<table datasrc=#Simple border=1>
<tr><td><span datafld="name"></span></td></tr>
<tr><td>
<table datasrc=#Simple datafld="order" border=1>
<tr><td><span datafld="description"></span></td></tr>
</table>
</tr></td>
</table>
</body>
</html>
它是直接把数据写到同一个html文件中的,正好符合楼主要求,单一文件传输,但是,因为我们需要解码后才能赋值给DataFld,所以又遇到了麻烦。好在后面又有进展。
MSDN后面给出了html页面中,使用脚本语言对xml操作的例子片断。
function addRow() {
var xmld, fc, nfc;
xmld = portfolio.XMLDocument.documentElement;
fc = xmld.firstChild;
if (!fc)
return;
nfc = fc.cloneNode(true);
xmld.insertBefore(nfc, null);
}
言外之意,我们可以让<img datasrc=#xxxx datafld=xxx>先绑定数据源,然后再对xml节点进行操作,赋给它我们解码后的数据,应该可以达到目的,但是,我又犹豫了,xml的节点的值难道可以二进制的?解码出来的图片的值岂不就是二进制了的么?能赋给xml节点么?不行吧??xml不就是用文本表示一切的么?除了datasrc和datafld还有其他可用的属性么?MSDN都列了,但是我看了几轮毫无收获。
帮助的地址是:
ms-help://MS.MSDNQTR.2004JAN.1033/DHTML/workshop/author/dhtml/reference/objects/img.htm
安装有MSDN的朋友应该可以看到。
困!睡觉~~~~等大家的答案~我玩不转了。