document.write()不能在一台机器上运行,而是在其他机器上工作

时间:2013-07-18 02:57:11

标签: javascript

我有一位客户使用我们的一个脚本使用document.write()将applet标签写入网页。该脚本适用于我们所有的开发机器,所有其他客户机器和该客户的家用机器。但是当在他的工作机器上运行时,document.write()不会执行。

此外,如果applet标签是用HTML编写的,那么applet标签的效果非常好。它只有在使用document.write编写时才会失败。为了测试,我们采用了包含准系统HTML的工作文件,将applet标记放在一行上并将其包含在document.write()中。 Java插件没有初始化,这似乎表明document.write被阻止或失败,与applet标签无关。

我应该调查什么原因或者我缺少什么?

该机器是在虚拟机中运行Ubuntu的Mac。包含该脚本的网页由在Ubuntu上运行的Tomcat 7提供服务。我们在Ubutu虚拟机上的Firefox和Chrome以及Mac主机上的Firefox和Safari上测试了该页面。这些都没有使用document.write()运行文件。

我知道在XHTML中禁用了document.write,但是我没看到如何将页面解析为XHTML。该文件不包含doctype声明,因此应该被解析为标准HTML。我还问过MIME类型是否已被修改(如果.htm扩展名被映射到XHTML mime类型),但他们没有。

我无法访问他的测试文件,但它基本上等同于:

<html>
<head>
   <title>Heat Map Explorer 2012</title>
</head>
<body style="margin: 0">
<script language="JavaScript">
document.write('<applet code="com.labescape.explorer.applet.HeatMapExplorerApplet.class" name="com.labescape.explorer.applet.HeatMapExplorerApplet" archive="resources/lib/explorer-applet-2012.2100.jar" height="100%" width="100%" border="0" mayscript="true"><param name="applet.config@paths" value="" /><param name="config@files" value="interfaces/cluster.xml,maps/machines.xml,resources/config/looks-jgoodies.xml,license.xml" /><param name="config.schema@files" value="resources/schemas/schema-swing.xml,resources/schemas/schema-hme.xml,resources/schemas/schema-looks.xml" /><param name="profiling" value="false" /><param name="java_arguments" value=" -Xmx256m" /><param name="separate_jvm" value="false" /></applet>');
</script>
</body>
</html>

3 个答案:

答案 0 :(得分:2)

控制台中没有语法错误并不意味着javascript被成功解析,它也可能根本没有被解析(这与你看到的结果一致)。

我会尝试通过删除语言属性(它是deprecated)来更改脚本标记,而是使用值为text/javascript的type属性。

<script type="text/javascript">document.write(/* Applet Content */);</script>

答案 1 :(得分:0)

  

“该文件不包含doctype声明,因此应该进行解析   作为标准HTML。“

您可以明确指定doctype并测试吗?

  

“此外,如果写入,applet标签的工作完全正常   HTML。它只有在使用document.write编写时才会失败。“

测试问题是否与document.write()或document.write('')一起尝试写一些类似document.write(“hello world”)

答案 2 :(得分:0)

您必须声明Document DOCTYPE以避免浏览器以静默方式触发兼容模式

但这有其权衡:特别是在IE中,一些doctypes会触发兼容模式,破坏已经适用于XHTML的东西。 CSS选择器甚至是javascript代码。您需要重新检查所有样式和功能。

  • 这是一个Test Code提到`(stackoverflow的文档DOCTYPE)。

  • Here,另一个提到HTML 4:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

  • 以下是有关IE上DOCTYPECompatibility Modes的信息。