如何检索HTML对象标记的文档对象

JavaScript: How to retrieve document object of HTML object tag?

本文关键字:对象 文档 HTML 何检索 检索      更新时间:2023-09-26

我试着调用document。打开/写入/关闭对象元素中的序列(type="text/html")。在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关闭后写入。我已经尝试过处理iframes,但由于ie和Opera的bug,我失败了。

这应该适合您。我不知道为什么(我只有怀疑)。

$(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);
});

Object元素在HTML5中已被弃用,所以你将无法再这样做了