2013-07-18 188 views
2

我有一位客户使用我们的脚本之一使用document.write()将小应用程序标记写入网页。该脚本适用于所有开发机器,所有其他客户机器以及该客户的家用机器上。但是当在他的工作机器上运行时,document.write()不会执行。document.write()不在一台机器上工作,在其他机器上工作

此外,如果使用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()运行文件。

我知道document.write在XHTML中是禁用的,但我没有看到如何将页面解析为XHTML。该文件不包含文档类型声明,因此应该将其解析为标准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="[email protected]" value="" /><param name="[email protected]" value="interfaces/cluster.xml,maps/machines.xml,resources/config/looks-jgoodies.xml,license.xml" /><param name="[email protected]" 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> 
+0

此外,我们检查了控制台,没有语法错误,所以JavaScript正在被正确解析。问题似乎在于执行该方法。 –

回答

0

“的文件不包含DOCTYPE声明,所以应该被解析 作为标准的HTML。”

你能明确指定doctype并测试它吗?

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

测试问题是否与document.write()的文件撰写或(“”)试着写类似文件撰写(“世界你好”)

2

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

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

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

+0

+1用于提及语言属性并链接弃用。节省我的时间:) – Shane

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">

  • 下面是有关DOCTYPECompatibility Modes上IE。

相关问题