如何使用内部Javascript的JSP将符合HTML的String写入新窗口?
我们的情况:
- Theres a .jsp-Tomcat-Server使用的文件
- .jsp包含<script language="Javascript>
- 标签
- 此脚本需要使用window.open
和'window'.document.write(htmlString)
我们的.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()?。
答案 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>