【问题标题】:how to render javascript in server side如何在服务器端呈现 javascript
【发布时间】:2010-12-14 23:02:21
【问题描述】:

我正在使用 java.net.URL 和输入流以字符串形式获取网页内容。

我遇到的问题是我的 javascript 没有呈现,我得到的是响应。

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

假设这是用 HTML 文件编写的代码.. 现在我想要当我以字符串形式获取网页内容时.. 应该呈现 javascript..

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

像这样..我怎么能这样做????

【问题讨论】:

  • 我在 google 上搜索了一下,发现了一个服务器端 javascript 的概念。这是一样的吗? .犀牛能做这件事吗?如果可以的话。怎么样?
  • Rhino 可以执行 JavaScript,但没有 HTML 或 DOM 的概念,因此它不知道 document 对象和 write() 方法。

标签: java javascript serverside-javascript


【解决方案1】:

java.net.URL 不会自动执行 JavaScript。带有内联 JavaScript 的 HTML 文件被视为任何其他纯文本文件,不会以任何方式进行解析。没有构建 DOM,没有执行 JavaScript,没有应用 CSS。要执行 JavaScript,您需要做的是用 HtmlUnit 之类的东西解析它。

但是,如果您可以控制 HTML,我建议您将 document.write() 语句替换为静态 HTML。一个非常基本的替代方法当然是只搜索正则表达式 document\.write\(([^\)]+)\);? 并将其替换为第一个捕获的匹配项。

【讨论】:

    【解决方案2】:

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

    提到的 netscape.javascript.JSObject 类中的 eval 方法可能是您正在寻找的(虽然我不确定它是否负责 DOM 操作以及是否可以跨浏览器工作)。

    祝你好运!

    【讨论】:

    • "Eval" 我认为还不够。它可能会在“脚本”标签之间呈现 js,但不能触发“body onload='blabla'”等事件。
    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多