2012-05-02 73 views
1

我正在研究一個小程序,它允許用戶輸入新聞文章或其他網頁(日文)的URL,並在我的頁面的iFrame中查看該頁面的內容。這個想法是,一旦內容被加載到頁面中,用戶可以使用它們的光標來突出顯示單詞,該單詞將所選文本存儲在數組中(用於翻譯/添加到術語的個人詞典),並將文本包圍在紅色框中(div)根據我的域上定義的樣式表。爲此,我使用cURL來檢索外部頁面的HTML並將其轉儲到iFrame的源代碼中。從cURL請求中正確格式化HTML

但是,我不斷遇到檢索到的HTML的主要格式問題。最大的問題是保留樣式表,爲了解決這個問題,我使用DOMDocument將標籤添加到檢索到的HTML部分。這適用於某些網頁/網址,但許多其他網頁的輸出HTML仍存在很多樣式問題。例如,div層相互碰撞,對齊關閉,背景丟失。由於我需要將輸出HTML嵌入到一個新的函數中,以便使嵌入式內容中的文本選擇能夠傳遞的onClick javascript函數正常工作,這意味着所得到的源代碼看起來像這樣:

<div onclick="parent.selectionFunction()" id ="studyContentn"> 

<!-- HTML of output from cURL, including doctype declarations and <html>,<head> tags --> 

</div> 

似乎大部分我所遇到的很多格式問題在很大程度上都是隨意的。我試過使用PHP Tidy清理HTML輸出,但這也只適用於某些頁面,但不適用於其他頁面。我有一個輕微的懷疑,它可能與CDATA聲明在處理DOMDocument時被奇怪地解析,但我不確定。

有沒有一種方法可以保證cURL的HTML輸出在所有情況下都能正確和忠實地呈現?或者,有沒有更好的方法去做這件事?我嘗試了很多不同的方法來解決這個問題,並且每個方法都更接近解決方案,但也帶來了自己的新問題。

謝謝 - 讓我知道我是否可以澄清任何事情。

回答

0

如果我理解正確,您正試圖拉一個完整的網頁的HTML,並顯示它在您的域下,在您的HTML。這總是會非常棘手,很多java腳本會被破壞,相對url將會是錯誤的,正如你所提到的,樣式也是如此。你可能也會改變頁面顯示的尺寸。這些都可以解決,但是你將要與每個新站點打一場艱苦的戰鬥,或者如果當前站點改變設計

我可能會採取解決問題的方法不同。您可能需要編寫一個瀏覽器插件作爲外部網站的界面。然後,您的applet可以位於功能強大且經過測試(希望)網站的頂部。然後,您可以專注於您需要爲小程序執行的操作,而不是永無止境的HTML問題列表。

0

我正在嘗試做類似的事情。保存格式化非常困難,並且網頁中的JS腳本使事情複雜化。我終於放棄了完全顯示原始格式的想法,但是採取了一種解決方法:

  1. 只選擇您感興趣的標題,鏈接,列表,段落。
  2. 將您的所有者的域名路徑添加到鏈接。
  3. 你可以用自己的類包裝標題,鏈接等項目。
  4. 在你的情況下顯示它 你想選擇文本並存儲它,這是另一個話題。我所做的是在兩個層次上解析HTMl,然後很容易做出選擇。請記住,IE和Firefox/Chrome需要單獨處理。