在HTML的object标签中读取数据

10

我有一个存储在服务器上的文本文件和一个HTML中的对象,就像这样:

<object id="data" type="text/plain" data="test.txt"></object>

如何在JavaScript中读取test.txt的内容?我目前所拥有的是:
var data = document.getElementByID("data");

但我不知道如何读取对象标签内的HTML文档。


1
这里有一个示例,可以读取内容并将其插入。 - va2ron1
使用 object 元素来显示文本文档有什么作用,相较于使用 iframe 元素呢?请参阅 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object 中的 "Permitted content"。 - guest271314
但我无法弄清如何在对象标签内读取HTML文档。.html文档似乎没有设置为“data”?“data”设置为“.txt”文件,“type”设置为“text/plain”。 - guest271314
对象标签会自动将文本文件包装在一个新的HTML文件中。根据Firefox检查器显示,它看起来像<object ...> #document <html><body>[test.txt的内容]</body></html></object> - rhynodegreat
尝试使用 var data = document.getElementByID("data").contentDocument.documentElement; - guest271314
2个回答

8
object 标签需要向服务器发起单独的请求并加载内容。 与此同时,您的JavaScript已经执行并且“失去了机会”。
object 的 onload 事件中运行您的代码。
然后,使用 .contentDocument.body.childNodes[0].innerHTML 来查看文本文件。
var object = document.getElementById("data");
object.onload = function() {
    var data = object.contentDocument.body.childNodes[0].innerHTML;
    // use the data
};

经过大量的试错,我终于弄明白了如何做到这一点!谷歌这次没什么帮助... text/plainpre 标签放在 object 内部,所以 childNodes 在那里。 - 4castle
顺便说一句,对于试图测试我的代码的人——我无法使用JSFiddle甚至是file://类型的HTML文件来测试它。(它会认为有XSS攻击并抛出错误)。我必须从我的localhost加载它才能进行测试。 - 4castle
这个不起作用了,可能是因为浏览器已经限制了本地加载。我得到了空数据。 - KKS
@4castle,你能否解释得更详细一些?因为上面的例子对我也不起作用。 - intergallactic
1
@intergallactic <object> 标签的 data 属性引用的文件必须是托管在与使用此 JavaScript 的 HTML 文件相同的服务器上的文件。否则,您需要为托管该文件的服务器配置 CORS,以允许其他服务器请求它。一旦您正确地托管文件,此代码将正常工作。 - 4castle

0
我创建了一个简单的函数和按钮作为示例。 只需复制HTML和JS代码,它应该可以正常工作。 只要确保为导入对象创建适当的txt或html文件即可。

[edit] Pay attention to the object line. especially the data="test.txt" portion of the object. If you do not create test.txt and add some text to the first line, the script will not work. [end edit]

function getObjectData()
{
    //alert("getObjectData");
    
    var myData = "";
    var object = document.getElementById("data");
    
    //get data inside object data
    var myData = object.contentDocument.body.childNodes[0].innerHTML;

    alert("myData => " + myData + " <= myData" );
}
#data{
    height: 36px;
    border: solid 1px red;
    /*overflow: hidden;*/
}
<div class="main">
    <object id="data" type="text/plain" data="test.txt"></object>
</div>
<br />
<button onclick="getObjectData()">Get Object Data</button>


我收到了以下信息:{ "message": "TypeError: object.contentDocument is null", "filename": "https://stacksnippets.net/js", "lineno": 28, "colno": 18 } - intergallactic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接