2015-02-09 117 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