好的,我会尽我所能。
有这个页面http://tiu.ru/image/tmp/test_2.html,在Opera和Chrome和Firefox(可能是其他人)中看起来不同。
评估<div></div>
内的javascript代码,该代码执行document.write("")
的另一个HTML代码<script>
,用于评估要求Google广告撰写广告的JS代码。
谷歌广告写了它的容器和容器的内容(从Yandex加载广告)((可能你需要禁用adblock才能看到广告,但你只能查看截图)。)
问题是在Opera中它以某种方式将内容写在原始div之外。
Chrome的结果屏幕截图: Opera的结果屏幕截图:
如果您将代码放在document.write()
中并将其放置为通常的HTML代码 - 一切正常。见http://tiu.ru/image/tmp/test_3.html
我无法弄清楚如何调试谷歌广告代码,这就是我寻求帮助的原因。谢谢。
p.s。:您可以将页面保存到localhost并打开它,不会加载广告,但DOM树也会出错。
非常感谢!
答案 0 :(得分:3)
好吧,你添加一个带有document.write()的脚本标签来执行document.write()来添加一个调用GA_googleFillSlot的脚本标签,GA_googleFillSlot本身会执行document.write()来添加一个设置为双击的SRC的SCRIPT。 net URL调用google_ads.js来触发另一个document.write(),它添加一个包含另一个document.write()调用的内联SCRIPT来添加另一个外部脚本,这次从an.yandex.ru加载context.js,看起来context.js还包含为文档添加两个外部脚本的代码。但是在这一点上已经发生了损坏:尽管使用document.write()插入的加载外部脚本应该阻止解析,但是当doubleclick.net脚本加载并调用回google_ads.js使Opera关闭父DIV时会发生奇怪的事情。
通过在GA_googleSetAdContentsBySlotForSync中设置断点并使用Opera Dragonfly,让我们看看DoubleClick在回调google_ads时的情况。我们去了:在输入这个脚本时,DOM仍然没问题,DIV没有关闭 - 但是当这个脚本线程做document.write()以添加带有注释,标记和脚本的<div id=google_ads_div_ru__context_informers_addon_360x90_ad_container>
时,关于那个新内容使Opera认为需要关闭以前的document.write() - 插入DIV。我想这是处理多个嵌套的document.write()的深层解析错误。
这将适用于Opera即将推出的HTML5解析器。如果你可能的话,不要担心它,等到Opera 12对它进行整理。
答案 1 :(得分:2)
Opera有一个严格的XHTML解析器。尝试将您的javascript包装在CDATA标记中,以便解析器忽略<
和&
个字符以及脚本中的任何其他非法字符:
<script type="text/javascript">
/* <![CDATA[ */
// put your js code here
/* ]]> */
</script>