繁体   English   中英

Javascript:使用匿名函数重写凌乱的代码CDATA更快吗?

[英]Javascript: rewriting messy code, CDATA, using anonymous-functions is faster?

我想重写广告客户脚本,因为它看起来很混乱。 而且我不明白那里的CDATA是什么意思。

<script type="text/javascript"><!--<![CDATA[
    document.write(unescape('%3C')+'script id="ADNET.LT.starchat.lt.Pixel_VisaAplinka" src="'+location.protocol+'//s2.ad.adocean.pl/_'+(new Date()).getTime()+'/ad.js?id=W54MHZcb7Z4vrcQ10kJleC.24iQP2N39Uy9dCJXnEmb.A7/x='+screen.width+'/y='+screen.height+'" type="text/javascript"'+unescape('%3E%3C')+'/script'+unescape('%3E'));
//]]>--></script>

所以我把它变成这样,只是我坚持了几件事:

<script type="text/javascript">
    var ad = document.createElement('script'); ad.type = 'text/javascript'; ad.async = true; ad.id = 'ADNET.LT.starchat.lt.Pixel_VisaAplinka'; ad.src = 'http://s2.ad.adocean.pl/' + new Date().getTime() + '/ad.js?id=W54MHZcb7Z4vrcQ10kJleC.24iQP2N39Uy9dCJXnEmb.A7/x=' + screen.width + '/y=' + screen.height;
</script>

我应该在匿名函数中使用脚本吗? 我注意到每个人现在都在使用它们,例如Google Analytics(分析)脚本和其他脚本,它有什么不同或更好?

还有一件事,我需要将在广告变量中创建的脚本对象插入文档中,而不是在head标记中,而是在脚本所在的元素内,我应该使用一些父属性吗?

您应该将代码包装在一个自动执行的匿名函数中,以从其他代码中隐藏变量。
这样可以避免污染全局名称空间。

您可以简单地将新的<script>元素附加到正文的末尾。

广告客户倾向于这样做的另一个原因是伪造广告拦截器。 他们以奇怪的方式向页面添加脚本,因此不会将其检测为广告,因此将展示广告。

真的非常快...如果脚本嵌入严格的XHTML文档中,则可以使用CDATA。

如果在通过JS准备好DOM之后添加脚本标签,并且该脚本标签具有document.write,那么这将是失败的。 不同的浏览器执行不同的操作,但是当时不允许使用document.write,例如,我相信IE将会使屏幕空白(也可能是FF)。

无论如何,您都不知道广告脚本中的内容,因此更改语义是不好的-他们应该这样做。 您今天可能有工作,明天可能会失败。 (即使将广告放入iframe也是一个问题,因为他们的所有引荐都来自您的iframe,并且如果经常以术语来伪造页面,更不用说如果他们使用window.location来根据上下文扫描您的页面时会出现问题内容)。

如果第三方广告脚本完全依赖document.write() (请参阅链接文档的“注释”部分),则可能无法“清理”代码以使其符合现代JavaScript编码标准,因为此类代码取决于该函数的行为是在新HTML的调用位置插入新HTML(这样,您就可以将广告代码复制/粘贴到页面上所需的位置)。

最接近的方法是重写document.write函数的行为,以便将广告代码存储在变量中,然后在完成广告脚本后将其插入到您选择的容器中(jQuery有一种方法可以做到) 。

我会这样做:如果您的广告网络允许将广告代码与其他JavaScript“隔离”,只要将广告代码放入iframe中即可。 与我对广告投放刷新率的回答进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM