2015-02-09 118 views
0

我的目标是从HTML文档中获取文本,该文档不会从我的.jsp文件调用任何函数。从外部HTML文档获取文本

我环顾四周,我以为我已经找到了我的问题的答案,但它似乎并没有工作,其他答案包括使用jQuery(我不熟悉和不允许使用) 。

这是到目前为止我的代码:

function getText(divID) { 
    var w = window.open("test.html"); 
    var body = w.document.body; 
    var div = document.getElementById(divID); 
    var textContent = body.textContent || body.innerText; 
    console.log(textContent); 

    //div.appendChild(document.createTextNode(textContent)); 
} 

因此,大家可以看到,我试图让一个HTML文档的主体,并将它出现在另一个。我在正确的轨道上吗?

编辑:好吧,所以我似乎让我的问题很混乱。我在称为html.html的HTML文档中调用该函数,但我想从test.html获取文本,然后将其显示在html.html中。它必须是这样的,因为我不能认为我想要读取的HTML文档将头文件中包含我的.jsp文件。

此刻我收到以下错误。

Uncaught TypeError: Cannot read property 'body' of undefined

+5

XMLHttpRequest对象比打开窗口要好。 – epascarello 2015-02-09 15:51:19

+0

除了epascarello所说的,元素没有['createTextNode'](https://developer.mozilla.org/en-US/docs/Web/API/document.createTextNode)方法,'document'有。你必须创建文本节点到'document',然后[追加](https://developer.mozilla.org/en-US/docs/Web/API/Node.appendChild)到'div' 。 – Teemu 2015-02-09 15:54:25

+0

这目前不是我的问题,因为您可以看到它已被注释掉。问题在于控制台产生:“Uncaught TypeError:无法读取未定义的属性'body'。 test.html和JSP在同一个目录下,并且我有另一个调用函数onload的HTML文件。 – 2015-02-09 15:58:25

回答

1

在其他window原因document.bodyundefined,是因为其他window没有加载和渲染的文件呢。

一种解决方案是等待onload事件。

function getText(divID) { 
    var w = window.open("test.html"); 
    w.addEventListener("load", function() { 
     var body = w.document.body; 
     var div = document.getElementById(divID); 
     var textContent = body.textContent || body.innerText; 
     console.log(textContent); 
    }); 
} 

确保你运行像点击一个用户事件getText功能,否则window.open将失败。

如果您只想获取其他窗口的内容,那么使用AJAX可能是更好的选择。

function getText(divID) { 
    var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4) { 
      var body = xhr.response.body; 
      var div = document.getElementById(divID); 
      var textContent = body.textContent || body.innerText; 
      console.log(textContent); 
     } 
    }; 
    xhr.open("GET", "test.html", true); 
    xhr.responseType = "document"; 
    xhr.send(); 
} 
+0

使用此我得到:Uncaught TypeError:无法读取未定义的属性'addEventListener' 正如我所说的,test.html(要读取的页面)与jsp和html.html都在同一目录中。这可能是我的文件结构有问题吗? – 2015-02-09 16:11:48

+0

@JamieBlue你使用什么浏览器? 'window.open'不应该返回'undefined'。除非您尝试在点击之类的用户事件外运行此操作? – 2015-02-09 16:14:18

+0

我使用谷歌浏览器,问题是它实际上试图打开一个新窗口,但阻止了弹出窗口。非常感谢你的帮助。 – 2015-02-09 16:20:58