2009-11-10 176 views
1

我使用java.net.URL和Input Streams獲取字符串中的網頁內容。如何在服務器端渲染javascript

這個問題我有我的JavaScript不呈現,我得到的,因爲它是響應。

<html> 
<head></head> 
<body> 
    <script> 
    document.write("<h1>hello world!</h1>"); 
    </script> 
</body> 
</html> 

想這是寫在HTML文件中的代碼..現在我想,當我得到的字符串..的JavaScript應b呈現的網頁內容..

<html> 
<head></head> 
<body> 
    <h1>Hello World!</h1> 
</body> 
</html> 

這樣的..如何我可以做到這一點?

+0

我已經GOOGLE了它,並發現服務器端JavaScript的概念。這是同樣的事情嗎? 。犀牛可以做這件事嗎?如果可以的話。怎麼樣 ?? – 2009-11-10 09:09:29

+0

Rhino可以執行JavaScript,但沒有HTML或DOM的概念,所以它不會知道'document'對象,並且它有一個'write()'方法。 – 2009-11-10 09:16:43

回答

1

JavaScript將不會由java.net.URL自動執行。帶有內嵌JavaScript的HTML文件僅被視爲任何其他純文本文件,不以任何方式進行分析。沒有構建DOM,沒有執行JavaScript,沒有應用CSS。你需要做的是使用類似於HtmlUnit的東西解析它。

但是,如果您對HTML有控制權,我建議您僅用靜態HTML替換document.write()語句。一個非常基本的替代方法當然就是對正則表達式document\.write\(([^\)]+)\);?進行搜索,並將其替換爲第一個捕獲的匹配項。

0

https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/LiveConnect/JSObject

在提到netscape.javascript.JSObject類實現eval方法可能是你在找什麼(雖然我不知道,如果它需要DOM操作的照顧,如果它可以跨瀏覽器) 。

祝你好運!

+0

「Eval」是不夠的,我認爲。它可能會在「腳本」標籤之間呈現js,但它不會觸發「body onload ='blabla'」等事件。 – 2009-11-10 11:19:13