在JSP中从Javascript编写HTML-String到新窗口

时间:2014-09-10 14:00:46

标签: java javascript html jsp

如何使用内部Javascript的JSP将符合HTML的String写入新窗口?


我们的情况:
- Theres a .jsp-Tomcat-Server使用的文件 - .jsp包含<script language="Javascript> - 标签
- 此脚本需要使用window.open'window'.document.write(htmlString)

将完整的HTML-5-valid-String写入新窗口


我们的.jsp-File(原理图):
    <%@ include file = "..." %> <...some page imports...> <...some scripts...> (e.g. <script type = "text/javascript" src="...."> </script>) <% String strMethod = "foo_Method_Bar"; String strOutput = ""; strOutput = someJavaBean-Call_that_brings_valid_html5_string_with_script-Nodes; %> ... <script language="Javascript"> var strHTML = "<%=strOutput%>"; var win = window.open('','','width=...,height=...'); win.document.write(strHTML); top.close(); win.focus(); </script>

我们的问题(示意图):
- .jsp-File被调用。
- .jsp-File调用JavaBean并将全局String-Variable设置为HTML-String(包括<script> - 标签,DocType-Declarations等。)
- .jsp-File用获得的String替换所有出现的Variable - javascript(<script> - .jsp文件中的标记)获得执行
- <script> - Javascript标记已经关闭,之后&#39; window&#39; .document.write(strHTML)被执行,因为它是</script> - Javascript中的标记 例如

    <script language="Javascript"> var strHTML = "<!DOCTYPE html> <html> ... <script> ... </script> ... </html>; var win = window.open(...); win.document.write(strHTML); </script>



- 我现在已经搜索了很长时间,而且我不知道如何解决这个问题。
- 将HTML-Sourcecode写入Server-File-System并稍后访问它或类似的东西真的很脏。
- 部分问题是我们(当然)因为历史原因必须在.jsp文件中使用这种类型的javascript调用... ;-)
- 是否有办法仅通过引用在.jsp-File中分配strHTML-Variable(例如,不替换&lt;%= strOutput%&gt; -Variable)?

附加信息:
HTML-String-Generation在我们的程序的各个地方被多次使用,所以我希望不必为了这个特定的Call工作而逃避任何特殊的CharacterSequences。



感谢您对此的所有帮助和想法...; - )

解决: 有关此问题,另请参阅Why split the tag when writing it with document.write()?

1 个答案:

答案 0 :(得分:0)

除非document.write存在于外部.script中,否则必须转义字符串<\/script>中的结束脚本

还要记得关闭文档,并且参数中没有空格到window.open

像这样

<script type="text/javascript">
  var strHTML = '<!DOCTYPE html> <html> ... <script> ... <\/script> ... </html>';
  var win = window.open("","winname","resizable,scrollbars");
  win.document.write(strHTML);
  win.document.close();
</script>