Webkit:window.open()から返されたDOMWindowオブジェクトにアクセスします

base64 dom javascript jquery
Webkit:window.open()から返されたDOMWindowオブジェクトにアクセスします

複数の* base64 エンコードされた画像があります。 これらの画像には、新しい window / tab を開き、新しく作成されたウィンドウに画像を追加する clickイベントハンドラ*があります。 これは* Firefox (3.6.xでテスト)では完全に機能しますが、これまでのすべての WebKit ブラウザーは何らかの理由で windowオブジェクト*へのアクセスを拒否します。

” ” ‘

jQuery('', {
    src: "data:image/png;base64,R0lGODlhDQAOAJEAANno6wBmZgAAAAAAACH5BAAAAAAALAAAAAANAA4AQAIjjI8Iyw3GhACSQecutsFV3nzgNi7SVEbo06lZa66LRib2UQAAOw%3D%3D",
    click: function() {
        var largeprev = window.open('data:text/html;charset=utf-8,' + escape(''), '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 content-typeで* data-uri を渡して新しいウィンドウを作成し、新しいウィンドウに画像を追加できるノードを作成する必要があります。 これは必要なことです。巨大な画像を処理していて、 base 64エンコーディング*を* window.open()に渡すだけの場合、このデータはすべて URLバー*に送られるため、かなり重いものになります。 。

そのため、ノードで新しいウィンドウを開き、Javascriptマジックを適用して画像を追加するというアイデアがありました。

FFではうまく機能しますが、Chrome / Safariの解決策が見つかりません。 任意のアイデアは大歓迎です。

” ” ‘

更新

これまでの唯一のクロスブラウザ作業ソリューションは、 `document.write()`のようです:

jQuery('', {
    src: "data:image/png;base64,R0lGODlhDQAOAJEAANno6wBmZgAAAAAAACH5BAAAAAAALAAAAAANAA4AQAIjjI8Iyw3GhACSQecutsFV3nzgNi7SVEbo06lZa66LRib2UQAAOw%3D%3D",
    click: function() {
        var virtualdom = '',
            prev       = window.open('', 'large');

        prev.document.open();
        prev.document.write(virtualdom);
        prev.document.close();
    }
}).prependTo(document.body);

アクションのコード:http://www.jsfiddle.net/bM6uY/3/

  0  0


ベストアンサー

データurlに設定されたsrc属性を持つ画像を含む空のhtmlドキュメントを開く方が簡単ではないでしょうか?

var data = "data:image/png;base64,RASSf4wwedfAAAA....",
    html= " Image Preview"+
                "",
    largePreview = open('');
largePreveiw.document.write(html);
largePreveiw.document.close();

HTMLDocument.writeを使用することは最善ではありませんが、コンテンツを追加できる要素があるとは思いません…​

0


これまでのところ、唯一のクロスブラウザ作業ソリューションはdocument.write()のようです:

jQuery('', {
    src: "data:image/png;base64,R0lGODlhDQAOAJEAANno6wBmZgAAAAAAACH5BAAAAAAALAAAAAANAA4AQAIjjI8Iyw3GhACSQecutsFV3nzgNi7SVEbo06lZa66LRib2UQAAOw%3D%3D",
    click: function() {
        var virtualdom = '',
            prev       = window.open('', 'large');

        prev.document.open();
        prev.document.write(virtualdom);
        prev.document.close();
    }
}).prependTo(document.body);

0


タイトルとURLをコピーしました