Javascript 修正了IE中的广告定位问题

Javascript 修正了IE中的广告定位问题,javascript,internet-explorer,css,Javascript,Internet Explorer,Css,可以跳到编辑以获得更为最新的解释。 我似乎无法将通过document.write()写出的广告设置为固定位置。它在除IE之外的所有其他浏览器中都能正常工作,包括IE9 以下是一个例子: 如有任何建议,将不胜感激。我的点子快用完了 多谢各位 编辑: 我已经把问题缩小到下面的IE问题。为了简化它 <style type="text/css"> #temp1 { position:fixed; bottom:0; heig

可以跳到编辑以获得更为最新的解释。

我似乎无法将通过
document.write()
写出的广告设置为固定位置。它在除IE之外的所有其他浏览器中都能正常工作,包括IE9

以下是一个例子:

如有任何建议,将不胜感激。我的点子快用完了

多谢各位

编辑:

我已经把问题缩小到下面的IE问题。为了简化它

<style type="text/css">
    #temp1
    {
        position:fixed; 
        bottom:0; 
        height:100px; 
        width:100px; 
        border:solid 2px red;
    }
</style>

<!--WORKS IN IE-->
<div id="temp1">
    <script type="text/javascript">
        document.write("<scr" + "ipt type=\"text/javascript\">\nif(typeof(cachebuster) == \"undefined\"){var cachebuster = Math.floor(Math.random()*10000000000)}\nif(typeof(dcopt) == \"undefined\"){var dcopt = \"dcopt=ist;\"} else {var dcopt = \"\"}\nif(typeof(tile) == \"undefined\"){var tile = 1} else {tile++}\ndocument.write('<scr'+'ipt src=\"http://ad.doubleclick.net/adj/shz.bloomington/home;pos=728x90_1;' + dcopt + ';tile=' + tile + ';sz=728x90;ord=' + cachebuster + '?\"></scr'+'ipt>');\n</scr" + "ipt>");
    </script>
</div>


<!--FAILS TO FIX POSITION IN IE-->
<script type="text/javascript">
    document.write('<div id="temp1">');
    document.write("<scr" + "ipt type=\"text/javascript\">\nif(typeof(cachebuster) == \"undefined\"){var cachebuster = Math.floor(Math.random()*10000000000)}\nif(typeof(dcopt) == \"undefined\"){var dcopt = \"dcopt=ist;\"} else {var dcopt = \"\"}\nif(typeof(tile) == \"undefined\"){var tile = 1} else {tile++}\ndocument.write('<scr'+'ipt src=\"http://ad.doubleclick.net/adj/shz.bloomington/home;pos=728x90_1;' + dcopt + ';tile=' + tile + ';sz=728x90;ord=' + cachebuster + '?\"></scr'+'ipt>');\n</scr" + "ipt>");
    document.write('</div>')
</script>

#temp1
{
位置:固定;
底部:0;
高度:100px;
宽度:100px;
边框:实心2px红色;
}
document.write(“\nif(typeof(cachebuster)=\'undefined\”{var cachebuster=Math.floor(Math.random()*1000000000)}\nif(typeof(dcopt)=\'undefined\”{var dcopt=\'dcopt=ist;\“}else{var dcopt=\'undefined\”}\nif(typeof(tile)=\'undefined\”{var tile=1}\ndocument;
文件。写(“”);
document.write(“\nif(typeof(cachebuster)=\'undefined\”{var cachebuster=Math.floor(Math.random()*1000000000)}\nif(typeof(dcopt)=\'undefined\”{var dcopt=\'dcopt=ist;\“}else{var dcopt=\'undefined\”}\nif(typeof(tile)=\'undefined\”{var tile=1}\ndocument;
文件。写入(“”)
不管怎样,我真的需要第二种方法来工作,我正在努力想办法


谢谢。

未经测试,但似乎它应该可以工作:

<script>
(function(){
  var w = window,
    d = document,
    s = d.createElement('script'),
    div = d.createElement('div'),
    el = [].slice.call(d.getElementsByTagName('script'), -1),
    baseUrl = 'http://ad.doubleclick.net/adj/shz.bloomington/home;pos=728x90_1;';
  // end var block

  if(!("cachebuster" in w)){
    cachebuster = Math.floor(Math.random()*10000000000);
  }
  dcopt = "dcopt" in w ? "" : "dcopt=ist;";
  tile = "tile" in w ? tile+1 : 1;

  div.id = 'temp1';
  div.appendChild(s);
  el.parentNode.inserBefore(div, el);
  s.src = baseUrl + dcopt + ';tile=' + tile + ';sz=728x90;ord=' + cachebuster + '?';

})();
</script>

(功能(){
var w=窗口,
d=文件,
s=d.createElement(“脚本”),
div=d.createElement('div'),
el=[].slice.call(d.getElementsByTagName('script'),-1),
baseUrl=http://ad.doubleclick.net/adj/shz.bloomington/home;位置=728x90_1;';
//端变分块
if(!((“cachebuster”在w中)){
cachebuster=Math.floor(Math.random()*1000000000);
}
dcopt=“dcopt”在w中?“:“dcopt=ist;”;
瓦片中的瓦片=“瓦片”瓦片+1:1;
div.id='temp1';
儿童组;
el.parentNode.inserBefore(div,el);
s、 src=baseUrl+dcopt+';tile='+tile+';sz=728x90;ord='+cachebuster+'?';
})();

看起来脚本标记没有像您预期的那样将广告嵌入到DIV中。 根据IE开发者工具,广告在你的部门之外,因此没有得到定位

使用您的示例代码将#temp1更改为A,将您的广告定位到您想要的位置

问题是你的广告没有收到这种风格。如果你可以选择让你的广告带着一个ID回来,那么你可以基于这个ID来设计你的风格,或者使用DOM操作来让你的广告在正确的位置

更深层次的问题是,让广告脚本在你的DIV中呈现它的内容,我只是不确定

更新:

我相信IE的区别在于使用SCRIPT标签的方法。使用src属性从另一个位置加载脚本似乎会破坏节点树

以下是一些证据:


在第一个示例中,您可以看到广告位于DIV内部,而在第二个示例中,广告位于DIV下方。IE中可能有一些规则说,带有src属性的脚本标记属于头部,因此它将它们放在DIV之外。

IE可能需要在编写脚本元素之前结束
temp1
DIV:

<script type="text/javascript">
    document.write('<div id="temp1"><' + '/div>');
    document.write("<scr" + "ipt type=\"text/javascript\">\nif(typeof(cachebuster) == \"undefined\"){var cachebuster = Math.floor(Math.random()*10000000000)}\nif(typeof(dcopt) == \"undefined\"){var dcopt = \"dcopt=ist;\"} else {var dcopt = \"\"}\nif(typeof(tile) == \"undefined\"){var tile = 1} else {tile++}\ndocument.write('<scr'+'ipt src=\"http://ad.doubleclick.net/adj/shz.bloomington/home;pos=728x90_1;' + dcopt + ';tile=' + tile + ';sz=728x90;ord=' + cachebuster + '?\"></scr'+'ipt>');\n</scr" + "ipt>");
</script>

请注意,我不能100%确定我在重新格式化脚本时没有输入错误,因为所有这些转义序列…

请检查您的HTML是否具有DTD格式。

此资源可能会有所帮助

也可以使用特定于浏览器的文档,也可以指定其他文档:

<!--[if lte IE 9]>

当编写带有“src”属性的脚本时,一些浏览器在实际运行外部脚本之前解析以下内联代码。外部脚本的结果将在div之外编写,因为内联代码创建了它,这在以前的很多浏览器中都是如此


没有简单的方法可以解决这个问题,可以将div放在html中,也可以放在外部脚本中。

如果将以下内容放在页面顶部会发生什么

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">


IE9之前的IE根本不支持
位置:已修复。你必须用JavaScript解决方案来伪造它。这很奇怪。。。一直到IE 7对我来说都很好。。。?但我真正的问题似乎是通过文档写入对象。写入具有固定位置的元素。真的吗??当然,我可能是错的,尽管我几乎可以肯定它在IE6中不起作用。我会在一秒钟内尝试7,因为如果它真的起作用,它肯定会很整洁:-)IE6确实会破坏一切,我个人不再关心它,只是打了一巴掌在这些坏男孩身上<代码>位置:固定
在IE7及以上版本中工作。然而,最初的问题没有说明他对哪个版本有问题。这是默认情况下它似乎表现出来的行为。尽管我希望不会。我希望该脚本在temp1 div中写入。如果使用appendChild,则不能再使用document.write。。而广告通常使用的是一个lothmm。。。正在尝试此操作,但是,继续获取el.parentNode未定义。。。为了以防万一,将其包装在几个div中,但同一个问题通过。。。el=document.getElementById('random'),但不定位固定元素的主要问题仍然存在。。。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">