首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Webkit:从window.open()返回的Access window.open对象

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

Stack Overflow用户
提问于 2011-02-08 20:49:54
回答 2查看 831关注 0票数 0

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

示例

代码语言:javascript
复制
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()

代码语言:javascript
复制
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/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-06 20:01:05

到目前为止,唯一的跨浏览器工作解决方案似乎是document.write():

代码语言:javascript
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2011-02-08 21:29:25

如果打开一个空白html文档,并将它的src属性设置为数据url,岂不更容易吗?

代码语言:javascript
复制
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并不是最好的方法,但我认为没有一个元素可以将内容添加到.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4938260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档