我有几个base64编码的图像。这些图像有一个单击事件处理程序,它打开一个新的窗口/选项卡,并将图像附加到新创建的窗口中。这在Firefox (在3.6.x上进行测试)中非常有效,但是到目前为止,所有WebKit浏览器都由于某种原因拒绝了对窗口对象的访问。
示例
jQuery('<img>', {
src: "data:image/png;base64,R0lGODlhDQAOAJEAANno6wBmZgAAAAAAACH5BAAAAAAALAAAAAANAA4AQAIjjI8Iyw3GhACSQecutsFV3nzgNi7SVEbo06lZa66LRib2UQAAOw%3D%3D",
click: function() {
var largeprev = window.open('data:text/html;charset=utf-8,' + escape('<div/>'), 'large'),
that = this;
largeprev.addEventListener('DOMContentLoaded', function(e) {
largeprev.alert('loaded');
largeprev.document.querySelectorAll('div')[0].appendChild(that);
}, false);
}
}).prependTo(document.body);行动中的代码:http://www.jsfiddle.net/bM6uY/
我一整天都在搞这个。我需要通过传递带有text/html内容类型的数据-uri来创建新窗口,以便在新窗口中有一些节点,在其中我可以附加图像。这是必要的,因为如果您正在处理巨大的图像,并且只需要将编码window.open(),的基数64编码,那么所有这些数据都会被放到地址栏中,这会使事情变慢。
因此,我有了一个想法,打开一个带有节点的新窗口,并应用Javascript魔术来追加图像。
在FF中效果很好,但是我找不到Chrome/Safari的解决方案。任何想法都很感激。
更新
到目前为止,唯一的跨浏览器工作解决方案似乎是document.write()。
jQuery('<img>', {
src: "data:image/png;base64,R0lGODlhDQAOAJEAANno6wBmZgAAAAAAACH5BAAAAAAALAAAAAANAA4AQAIjjI8Iyw3GhACSQecutsFV3nzgNi7SVEbo06lZa66LRib2UQAAOw%3D%3D",
click: function() {
var virtualdom = '<html><body><img src="' + this.src + '"/></body></html>',
prev = window.open('', 'large');
prev.document.open();
prev.document.write(virtualdom);
prev.document.close();
}
}).prependTo(document.body);行动中的代码:http://www.jsfiddle.net/bM6uY/3/
发布于 2012-08-06 20:01:05
到目前为止,唯一的跨浏览器工作解决方案似乎是document.write():
jQuery('<img>', {
src: "data:image/png;base64,R0lGODlhDQAOAJEAANno6wBmZgAAAAAAACH5BAAAAAAALAAAAAANAA4AQAIjjI8Iyw3GhACSQecutsFV3nzgNi7SVEbo06lZa66LRib2UQAAOw%3D%3D",
click: function() {
var virtualdom = '<html><body><img src="' + this.src + '"/></body></html>',
prev = window.open('', 'large');
prev.document.open();
prev.document.write(virtualdom);
prev.document.close();
}
}).prependTo(document.body);发布于 2011-02-08 21:29:25
如果打开一个空白html文档,并将它的src属性设置为数据url,岂不更容易吗?
var data = "data:image/png;base64,RASSf4wwedfAAAA....",
html= "<html><head> <title>Image Preview</title></head>"+
"<body><img src='"+data+"'></img></body></html>",
largePreview = open('');
largePreveiw.document.write(html);
largePreveiw.document.close();使用HTMLDocument.write并不是最好的方法,但我认为没有一个元素可以将内容添加到.
https://stackoverflow.com/questions/4938260
复制相似问题