Javascript Webkit:Access从window.open()返回的DOMWindow对象

Javascript Webkit:Access从window.open()返回的DOMWindow对象,javascript,jquery,dom,base64,Javascript,Jquery,Dom,Base64,我有几个base64编码的图像。这些图像有一个单击事件处理程序,它打开一个新窗口/选项卡,并将图像附加到新创建的窗口中。这在3.6.x上的Firefox测试中非常有效,但到目前为止,所有WebKit浏览器都因为某种原因拒绝访问窗口对象 范例 运行代码:打开一个空白的html文档时,如果将图像的src属性设置为数据url,不是更容易吗 var data = "data:image/png;base64,RASSf4wwedfAAAA....", html= "<html><

我有几个base64编码的图像。这些图像有一个单击事件处理程序,它打开一个新窗口/选项卡,并将图像附加到新创建的窗口中。这在3.6.x上的Firefox测试中非常有效,但到目前为止,所有WebKit浏览器都因为某种原因拒绝访问窗口对象

范例


运行代码:

打开一个空白的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不是最好的,但我认为没有一个元素可以将内容添加到…

到目前为止,唯一的跨浏览器工作解决方案似乎是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);

这与我描述的问题相同。所有数据都会进入浏览器的地址栏。我正在处理拥抱图像,这会挂起/减慢浏览器。顺便说一句,如果没有data:text/html前缀,这可能根本不起作用。@jAndy oops。。。对不起,我认为open的工作方式不同。。。我想我修正了答案。@jAndy:我认为这个答案无论如何都不管用,因为你不能将任意html传递给window.open AFAIK。您可以传递:空白,然后:largePreview.document.open;largePreview.document.writehtml;大预览。文档。关闭;,这和这个答案的精神是一样的。@Roatin Marth我不这么认为:blank适用于所有浏览器,在大多数文档中,它说使用blankstring@Roatin玛斯:嗯,你至少给我指出了一个可行的解决方案,请看问题中我的更新。到目前为止,这适用于所有浏览器。
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();
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);