1

我相信我在 Opera(Windows 7 上运行的 12.01 版)中发现了一个错误,但我正在寻求可能的解决方法的帮助(假设其他人可以确认这是一个错误)。

如果我有一个包含以下内容的 HTML 页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Test</title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" />
  </head>
  <body onload="window.alert(0);">
  </body>
</html>

“onload”事件永远不会被触发。奇怪的是,如果我关闭脚本标签而不是自行关闭它,然后更改:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" />

到:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

(不幸的是我做不到),该事件触发并显示我的警报。

有没有其他人遇到过这个问题?如果是这样,除了将脚本标签从更改为 之外,他们是否找到了解决<script />方法<script></script>

注意:是的,我已经打开了 Opera 的错误报告。他们还没有回复。

4

2 回答 2

3

这个“错误”存在于所有浏览器中,不仅在 Opera 中(我测试过 Chrome、FF 和 IE)。

自动关闭脚本标签不起作用。在 SO 上看到这个问题:为什么自闭合脚本标签不起作用?

编辑:

我不知道为什么你不能用 关闭脚本标签</script>,但一种可能的解决方法是用 JavaScript 加载脚本:

var newScript = document.createElement("script");
newScript.type = "text/javascript";
newScript.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";
newScript.onload = function(){
    // jQuery code...
};
document.getElementsByTagName("head")[0].appendChild(newScript);

(好吧,诚然,这实际上迫使你在</script>某处使用,但至少<script></script>now 之间的部分不是空的......:P)

于 2012-08-16T21:30:23.113 回答
2

Opera 所做的对 HTML5 来说是正确的。要了解为什么 onload 不运行,您需要记住带有 SRC 集的 SCRIPT 标记的内容应该被忽略。由于 /> 不是关闭第一个 SCRIPT 标记的正确方法,因此后续的头尾和正文开始标签最终位于 SCRIPT 标记内。这有点像这样写:

<script src="foo.js">
</head><body><p>This doesn't appear anywhere, does it?</p></body>
</script>

因此,onload 永远不会首先设置,因为 SCRIPT 标签内的 BODY 将被忽略。

于 2012-08-17T11:48:19.203 回答