0

我发布了另一个相关问题:Java Servlet:删除临时文件

根据@BalusC 的建议,我一直在尝试实现一些不同的东西,但没有成功。

因此,我想问以下问题:是否可以在运行时将 HTML 内容“注入”到 iframe 中?

澄清一下,我正在使用 Servlet 和 JSP。我有一个 servletdoPost填充并显示 JSP 页面。页面如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

<script> function disp() {
  alert(document.getElementById('ifrm').contentDocument.documentElement.innerHTML); } 
</script>    

<style type="text/css">
  html, body, div { margin:0; padding:0; height:100%; }
  iframe { display:block; width:100%; height:90%; border:none; }
</style>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>This is SPARTA!!</title>
</head>

<body>
  <a href='getter?url=<%= request.getRequestURI() %>&starter=fine'>Close Session</a>
  <input type='button' onclick='disp()' value='Source'></input>
  You want me to load: <%= request.getParameter("url") %> , and here it is:

  <iframe id='ifrm' src='<%= request.getSession().getAttribute("relpath") %>'></iframe>
</body>
</html>

“relpath”是我在前一点添加到会话的属性,表示临时文件的相对路径。它有效,但我有一个不可告人的问题:iframe 中包含的页面中的链接已适当更改,以便它们正常运行。效果是人们可以在 iframe 内导航,就好像它是浏览器选项卡一样。因此,当单击页面上的链接时,临时文件会用链接指向的站点的内容重写。但是,页面没有重新加载,我认为这是因为浏览器检索缓存的页面,而不是浏览器中的页面。我尝试通过 JavaScipt 刷新 iframe 的源并且它起作用,但是有延迟,并且页面加载了两次 - 我不希望那样。我也试过用document.write()在 iframe 对象上的 JavaScript 中,再次没有成功。

最后澄清一下:iframe 应该包含页面的整个 HTML,并带有<html>and</html>标记:我确实想过创建一个带有 DIV 的 JSP 页面,并在那里注入内容,但这也不是我想要的......

先感谢您!

4

1 回答 1

0

我实际上设法自己解决了这个问题。

最后,我回到了 JavaScript。使用 Beans,我设法将页面的内容传递给 JSP 页面,然后我简单地“回显”文档的行。我必须告诉任何有兴趣的人,我在转义特殊字符时遇到了一些困难:在某些情况下,我必须手动转义 CR 和 LF,并且必须处理</script>页面中的现有标签,因为它们会导致 JavaScript 过早退出。我设法通过将字符更改为 来克服这个困难'<'\x3C正如此处另一个线程所建议的那样,在 SO 上。

于 2013-08-01T13:11:09.983 回答