Javascript Opera中难以调试的情况(或错误)

Javascript Opera中难以调试的情况(或错误),javascript,html,dom,opera,Javascript,Html,Dom,Opera,好的,我会尽力的 这个页面在Opera中的外观与Chrome和Firefox(可能还有其他)中的外观不同 它计算中的javascript代码,该代码用于文档。使用编写另一段HTML代码的(“”),该代码计算要求谷歌广告编写广告的JS代码 谷歌广告编写它的容器和容器的内容(从Yandex加载广告)((也许你需要禁用adblock才能看到广告,但你可以只查看屏幕截图)) 问题是,在歌剧中,它以某种方式在原始div之外编写内容 Chrome的结果截图: Opera的结果截图: 如果您将该代码放入doc

好的,我会尽力的

这个页面在Opera中的外观与Chrome和Firefox(可能还有其他)中的外观不同

它计算
中的javascript代码,该代码用于
文档。使用
编写另一段HTML代码的(“”
),该代码计算要求谷歌广告编写广告的JS代码

谷歌广告编写它的容器和容器的内容(从Yandex加载广告)((也许你需要禁用adblock才能看到广告,但你可以只查看屏幕截图))

问题是,在歌剧中,它以某种方式在原始div之外编写内容

Chrome的结果截图: Opera的结果截图:

如果您将该代码放入
document.write()
中,并像往常一样将其放入HTML代码中,则一切正常。看

我不知道如何调试谷歌广告代码,这就是我寻求帮助的原因。多谢各位

p、 答:您可以将页面保存到本地主机的某个位置并打开它,广告不会被加载,但DOM树也会出现同样的错误


多谢各位

Opera有一个严格的XHTML解析器。尝试将javascript包装在CDATA标记中,以便解析器忽略
Opera有一个严格的XHTML解析器。尝试将javascript包装在CDATA标记中,以便解析器忽略
好的,您可以添加一个带有document.write()的脚本标记,该标记执行document.write()来添加一个调用GA_googleFillSlot的脚本,而GA_googleFillSlot本身执行document.write()来添加一个将SRC设置为双击.net URL的脚本,该脚本将调用回google_ads.js来触发另一个文档。write()这将添加一个包含另一个document.write()调用的内联脚本,以添加另一个外部脚本,这次从an.yandex.ru加载context.js,并且context.js似乎还包含向文档添加另外两个外部脚本的代码。但在这一点上,损害已经发生了:虽然加载与document.write()一起插入的外部脚本会阻止解析,但当doubleclick.net脚本加载并调用google_ads.js使Opera关闭父DIV时,会发生一些奇怪的事情

让我们看看DoubleClick调用google_ads时DOM是什么样子的-通过在GA_googleSetAdContentsBySlotForSync中设置断点并使用Opera Dragonfly。好了:在输入这个脚本时,DOM仍然正常,DIV没有关闭-但是当这个脚本线程执行document.write()添加带有注释、标记和脚本的
时,Opera会认为新内容需要关闭以前的文档。write()-插入的DIV。我猜这是一个解析错误,深入到处理多个嵌套document.write()的过程中


这将与Opera即将推出的HTML5解析器配合使用。如果可能的话,不要担心,等到Opera 12将其全部整理出来。

好吧,您可以添加一个带有document.write()的脚本标记,该标记执行document.write()以添加一个调用GA_googleFillSlot的标记,该标记本身执行document.write()要将SRC设置为doubleclick.net URL的脚本添加到doubleclick.net URL中,该URL将回调到google_ads.js以触发另一个document.write()以添加包含另一个document的内联脚本。要添加另一个外部脚本,请调用write(),这次从.yandex.ru加载context.js,看起来context.js还包含了向文档中添加另外两个外部脚本的代码。但在这一点上,损害已经发生了:虽然加载与document.write()一起插入的外部脚本会阻止解析,但当doubleclick.net脚本加载并调用google_ads.js使Opera关闭父DIV时,会发生一些奇怪的事情

让我们看看DoubleClick调用google_ads时DOM是什么样子的-通过在GA_googleSetAdContentsBySlotForSync中设置断点并使用Opera Dragonfly。好了:在输入这个脚本时,DOM仍然正常,DIV没有关闭-但是当这个脚本线程执行document.write()添加带有注释、标记和脚本的
时,Opera会认为新内容需要关闭以前的文档。write()-插入的DIV。我猜这是一个解析错误,深入到处理多个嵌套document.write()的过程中


这将与Opera即将推出的HTML5解析器配合使用。如果可能的话,请不要担心,等到Opera 12将其全部整理出来。

好吧,
document.write()
太糟糕了,我不奇怪它会导致这样的问题。问题可能是浏览器在执行脚本块之前创建了外部
。这似乎完全合理,但我也可以想象浏览器会做出不同的决定。好吧,
document.write()
太糟糕了,我并不奇怪它会导致这样的问题。问题可能是浏览器在执行脚本块之前创建了外部
。这似乎是完全合理的,不过我也可以想象一个浏览器会做出不同的决定。是的,这实际上解决了问题!你挽救了这一天(实际上是两天)。谢谢哦,对不起,我弄错了。这并不能解决问题。这里是一个例子,顺便说一句,在原始HTML中,我实际上是从外部加载脚本的,所以不需要CDATA。昨天我对这个bug太在意了,太累了,所以我认为它已经解决了。)是的,这实际上解决了问题!你挽救了这一天(实际上是两天)。谢谢哦,对不起,我弄错了。这并不能解决问题。这里是一个例子,顺便说一句,在原始HTML中,我实际上是从外部加载脚本的,所以不需要CDATA。昨天我对这个bug太过担心,太累了,所以我认为它已经解决了。)好吧,这听起来像是正确的解释,所以现在就让它成为一个答案吧(可能是因为document.writing of div,我需要测试它)。谢谢你的时间!好吧,这听起来像是一个真实的解释,所以现在就让它成为一个答案吧(也许是罪魁祸首)
<script type="text/javascript">
/* <![CDATA[ */

  // put your js code here

/* ]]> */
</script>