我正在尝试延迟执行此广告脚本:
<script type="text/javascript">
var _pop = _pop || [];
_pop.push(['siteId', 809347]);
_pop.push(['minBid', 0.000000]);
_pop.push(['popundersPerIP', 0]);
_pop.push(['delayBetween', 0]);
_pop.push(['default', false]);
_pop.push(['defaultPerDay', 0]);
_pop.push(['topmostLayer', false]);
(function() {
var pa = document.createElement('script'); pa.type = 'text/javascript'; pa.async = true;
var s = document.getElementsByTagName('script')[0];
pa.src = '//URL/pop.js';
pa.onerror = function() {
var sa = document.createElement('script'); sa.type = 'text/javascript'; sa.async = true;
sa.src = '//URL/pop.js';
s.parentNode.insertBefore(sa, s);
};
s.parentNode.insertBefore(pa, s);
})();
</script>
为此,我以这种方式申请setTimeout
:
setTimeout (function() {
(function() {
var pa = document.createElement('script'); pa.type = 'text/javascript'; pa.async = true;
var s = document.getElementsByTagName('script')[0];
pa.src = '//c1.popads.net/pop.js';
pa.onerror = function() {
var sa = document.createElement('script'); sa.type = 'text/javascript'; sa.async = true;
sa.src = '//c2.popads.net/pop.js';
document.head.appendChild(sa, s);
};
document.head.appendChild(pa, s);
})(); }, 2300);
</script>
并使用s.parentNode.insertBefore
document.head.appendChild
脚本开始但我没有看到延迟。
我已经读过“如果目标脚本希望同步运行并使用document.write
,那你就不走运了。除非,你想做一些涉及覆盖原生document.write函数的乱七八糟的黑客。” / p>
我需要覆盖document.write
?
答案 0 :(得分:0)
您可以通过多种方法延迟执行任何脚本。简单的:
defer="defer"
attribute添加到脚本标记(如果它加载外部文件)。在页面解析结束时执行被延迟。setTimeout
来延迟。确保setTimeout本身被包装为执行on DOM ready event,否则它将在执行时启动计数器,然后渲染页面的其余部分,如果渲染速度很慢,您可能看不到任何效果。附注:
someScriptElement.parentNode.insertBefore
被认为是比document.head.appendChild
更好的做法,因为文档可能没有标题。document.write
的任何脚本强制您同步加载 (因此应尽可能避免document.write
)。您可以尝试通过覆盖document.write函数来模拟同步加载,以便您可以异步加载脚本。但在您的情况下,广告代码不使用document.write
,并且它会异步加载另一个脚本 ,因此您不必费心。