IE不读取<script>标签,但刷新后工作正常</script>

时间:2012-11-23 20:09:32

标签: javascript html

我有一个奇怪的错误,只存在于IE(7/8/9 / 9CV)中。 FF和Chrome没有这个问题。

我有一个非常大的复杂页面。在页面底部,我依次有两段JavaScript代码。第一个没有问题,但第二个由于某种原因在我第一次加载页面时显示为文本。如果我只是刷新页面而不做任何其他事情 - 一切正常并且看起来很好。

在服务器上从两个不同的小页面生成两个JS,因此我无法将它们放在一个脚本标记中。第一段JavaScript代码只不过是用不同的参数多次调用同一个函数,而第二个脚本只是一个JSON类似对象的声明,它正被页面上前面定义的另一个函数所使用。

所以页面代码看起来像这样:

<!DOCTYPE html>
<html>
<head>
  ...
<title>...</title>
</head>
<body>
...
<script type="text/javascript">
//Some javascript that executes perfectly fine every time and is nothing more but just couple of calls to some function
someFunction("param1");
someFunction("param2");
someFunction("param3");
</script>
<script type="text/javascript">
var myObject = {"success":[{"header":"Form successfully submitted","messages":["Some message 1"]}]};
</script>
</body>
</html>

因此,当表单提交发生时,我会使用此对象并使用它在页面上显示消息。但相反,当用户提交表单并首次打开页面时,我会在页面底部看到这一点:

var myObject= {"success":[{"header":"Form successfully submitted","messages":["Some message 1"]}]};

但是当我刷新页面时 - 我看不到代码,而是看到消息显示的是来自此对象的值。

当我打开“开发人员工具”并导航到HTML标签页时,我看到第二个JS文章的标签显示为已注释掉!

<!-- sctipt ... -->

但是如果我刷新页面 - 它工作正常,并且在开发人员工具的HTML选项卡中它实际显示为一个脚本节点,我可以展开并查看Javascript代码。

有谁知道这里发生了什么?!?!这个问题一直困扰着我好几天了!

3 个答案:

答案 0 :(得分:4)

你应该替换

<script type="text/javascipt">

<script type="text/javascript">

编辑:

HTML不是XHTML。不要将脚本包装在CDATA中。你的脚本元素应该是这样的:

<script type="text/javascript">
  var t0_date = new Date();
  ...
</script>

答案 1 :(得分:1)

更改这两项:

<script type="text/javascipt">

为:

<script type="text/javascript">

答案 2 :(得分:1)

好吧,我找到了这个问题的答案。好吧,我猜的更多是一项工作,因为这不是我预期的,但它确实有效。

基本上,如果你在两个脚本元素之间放置任何东西 - IE wokrs就好了! 所以我做的是 - 我把br标签放在它们之间,它现在工作正常。我不知道为什么。可能是IE渲染引擎中的一些奇怪的错误。

最终结果如下:

<script type="text/javascript">
//Some javascript that executes perfectly fine every time and is nothing more but just couple of calls to some function
someFunction("param1");
someFunction("param2");
someFunction("param3");
</script>
<br>
<script type="text/javascript">
var myObject = {"success":[{"header":"Form successfully submitted","messages":["Some message 1"]}]};
</script>