2010-01-05 27 views
2

我打开使用JS的新页面,并写入它的HTML代码,但是当我尝试使用document.write()函数写入新页面内的JS时,它不起作用。显然,主JS在看到</script>后立即关闭,这是用于将要打开的新页面的JS。JavaScript如何创建包含更多JavaScript的新页面?

有没有在这附近?

var opened = window.open(""); 
opened.document.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"); 
opened.document.write("<html lang=\"en-US\" xml:lang=\"en-US\" xmlns=\"http://www.w3.org/1999/xhtml\">"); 
opened.document.write("<head><title>Print Copy</title></head>"); 
opened.document.write("<body>"); 
opened.document.write("<script type=\"text/javascript\">"); 
opened.document.write("</script>"); 
opened.document.write("<p>test</p></body></html>"); 

回答

7

这听起来像你嵌入JS到HTML文档,而不是使用一个外部文件,并且正在为它服务作为text/html。 (如果是XHTML,那么你会得到一个简单的格式错误)。

你可以将代码移动到外部文件(这是最简单的选择),或者你可以逃跑,看起来像一个结束标签上的任何斜杠字符:

document.write("<\/script>"); 

注意,你应该这样做是为了全部结束标记(不仅仅是</script>)由于SGML的工作方式(即使大多数浏览器不完全遵守SGML规则)。

a good FAQ entry on this subject

+1

你见过这个呢:http://stackoverflow.com/questions/1985385/script-inside-javascript-code-document-write?将脚本移动到外部文件可能会导致IE挂起* document.write *?好奇... – 2010-01-05 09:35:09

0

编辑:因为有人指出,你应该使用反斜线斜线。

最简单的(但非标)解决方案就是要打破你的字符串:

opened.document.write("</scr"+"ipt>"); 
+1

这种方法依赖于执行错误恢复的浏览器,应该避免。它是无效的HTML。 http://bit.ly/5dN2dv – Quentin 2010-01-05 09:21:58

+2

我不知道,你每天都会学到新的东西:)你链接到的FAQ很有趣。 – Jerome 2010-01-05 09:25:59

6

如果你不喜欢拆分的字符串,你也可以使用转义字符:

opened.document.write("<\/script>"); 
相关问题