Javascript 这是Opera中的加载错误吗?

Javascript 这是Opera中的加载错误吗?,javascript,opera,onload,Javascript,Opera,Onload,我相信我已经在Windows7上运行的Opera 12.01版中发现了一个bug,但我正在寻找一个可能的解决方法,假设其他人可以确认这是一个bug 如果我有一个包含以下内容的HTML页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://

我相信我已经在Windows7上运行的Opera 12.01版中发现了一个bug,但我正在寻找一个可能的解决方法,假设其他人可以确认这是一个bug

如果我有一个包含以下内容的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" />
致:

不幸的是,我不能这样做,事件将触发,我的警报将显示

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


注意:是的,我已经用Opera打开了一个bug报告。他们还没有回复。

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

自动关闭脚本标记就是不起作用。见本问题:

编辑:

我不知道为什么不能用关闭脚本标记,但一种可能的解决方法是使用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);

好的,不可否认,这实际上迫使你在某个地方使用,但至少从现在到现在的部分不是空的…:P

这个bug存在于所有浏览器中,不仅仅是Opera,我还测试了Chrome、FF和IE

自动关闭脚本标记就是不起作用。见本问题:

编辑:

我不知道为什么不能用关闭脚本标记,但一种可能的解决方法是使用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);

好的,不可否认,这实际上迫使你在某个地方使用,但至少从现在到现在的部分不是空的…:P

根据HTML5,Opera所做的是正确的。要理解onload为什么不运行,您需要记住SRC set的脚本标记的内容应该被忽略。由于/>不是关闭第一个脚本标记的正确方法,因此随后的头末端标记和体末端标记都会在脚本标记内结束。这有点像这样写:

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

因此,onload永远不会首先设置,因为脚本标记中的主体将被忽略。

Opera所做的事情在HTML5中是正确的。要理解onload为什么不运行,您需要记住SRC set的脚本标记的内容应该被忽略。由于/>不是关闭第一个脚本标记的正确方法,因此随后的头末端标记和体末端标记都会在脚本标记内结束。这有点像这样写:

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

因此,永远不会首先设置onload,因为脚本标记中的主体将被忽略。

为什么不能添加?你必须这么做!实际上是无效的HTML,在任何浏览器中都不起作用:-那只虫子的虫子号是多少?我会关上它;最初的混乱是由Opera的Dragonfly工具造成的,该工具在其HTML检查器中将脚本标记显示为自动关闭@奇怪的是,W3C验证程序说上面的HTML是100%兼容的。看:为什么你不能添加?你必须这么做!实际上是无效的HTML,在任何浏览器中都不起作用:-那只虫子的虫子号是多少?我会关上它;最初的混乱是由Opera的Dragonfly工具造成的,该工具在其HTML检查器中将脚本标记显示为自动关闭@奇怪的是,W3C验证程序说上面的HTML是100%兼容的。看:我看不出你的编辑是正确的。正如问题中提到的那样,它能像预期的那样工作。我从来没有说过不会工作——当然会。但我编辑了我的答案,以避免加载外部JS文件时出现空标记。我不知道这是否有助于@userx,因为我仍然不明白为什么需要自动关闭脚本标记。我不知道您的编辑是如何正确的。正如问题中提到的那样,它能像预期的那样工作。我从来没有说过不会工作——当然会。但我编辑了我的答案,以避免加载外部JS文件时出现空标记。我不知道这是否有助于@userx,因为我仍然不明白为什么有必要自行关闭脚本标记。