0

オブジェクト要素(type = "text / html")内でdocument.open/write/closeシーケンスを呼び出そうとしました。Safari / Chromeでは、contentDocument属性によって内部ドキュメントオブジェクトを取得できます。サンプルコード(jqueryを使用):

$(document).ready(function() {
  var container = $('<object/>')
    .css({'width': '700px', 'height': '100px', 'border': '0px none'})
    .attr({'type': 'text/html'}).appendTo('body');

  var doc = container.get(0).contentDocument;
  doc.open();
  doc.write('<h1>Hello world!</h1>');
  doc.close();
});

他のブラウザで同じことをする方法はありますか?

このような奇妙なことをしたい理由は、DOMが閉じられた後にdocument.writeを含む外部スクリプトを呼び出す必要があるためです。私はすでにiframeを扱ってみましたが、InternetExplorerとOperaのバグのために失敗しました。この目標を達成するための他の方法は高く評価されます。

4

2 に答える 2

1

これはあなたのために働くはずです。理由はわかりません(疑いがあるだけです)。

$(document).ready(function () {
    var container = $('<object>')
        .css({
            'width': '700px',
            'height': '100px',
            'border': '0 none'
        })
        .attr({
            'type': 'text/html',
            'data': 'about:blank'
        })
        .appendTo('body');

    function writeToDoc() {
        var obj, doc;
        obj = container.get(0);
        if (obj.document) {
            doc = obj.document;
        } else if (obj.contentWindow) {
            doc = obj.contentWindow.document;
        }
        else if (obj.contentDocument) {
            doc = obj.contentDocument;
        }
        if (doc) {
            doc.open();
            doc.write('<h1>Works!</h1>');
            doc.close();
        } else {
            $('body').append('<h1>No luck...</h1>');
        }
    };

    // yes, this is weird
    setTimeout(writeToDoc, 0);
});
于 2013-03-27T10:24:29.590 に答える
1

Object要素はHTML5で非推奨になっているため、これ以上実行できなくなります。

于 2015-06-27T17:52:58.957 に答える