我在标题中有一个JS文件(这是针对Google DFP广告管理系统),另一个是JS文件 </body>
我发现如果标题JS文件没有加载到底部之前我在Chrome控制台中收到此错误:
Uncaught TypeError: Object #<Object> has no method 'defineSlot'
Run Code Online (Sandbox Code Playgroud)
defineSlot在第一个脚本中定义.这个问题只发生在大约每10页刷新一次,所以大部分时间都可以.
我想就如何处理这个问题提出建议.以下是2个脚本:
标题脚本:
<script type='text/javascript'>
var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];
(function() {
var gads = document.createElement('script');
gads.async = true;
gads.type = 'text/javascript';
var useSSL = 'https:' == document.location.protocol;
gads.src = (useSSL ? 'https:' : 'http:') +
'//www.googletagservices.com/tag/js/gpt.js';
var node = document.getElementsByTagName('script')[0];
node.parentNode.insertBefore(gads, node);
})();
</script>
<script type='text/javascript'>
googletag.cmd.push(function() {
googletag.pubads().enableAsyncRendering();
slot1 = googletag.defineSlot('/21848415/GoneGlobal_Square', [250, 250], 'doubleClickSquareIndex-250-250').addService(googletag.pubads());
slot2 = googletag.defineSlot('/21848415/GoneGlobal_Skyscraper', [160, 600], 'doubleClickSkyscraperIndex-160-600').addService(googletag.pubads());
slot3 = googletag.defineSlot('/21848415/GoneGlobal_Leaderboard', [728, 90], 'doubleClickLeaderboardIndex-728-90').addService(googletag.pubads());
slot4 = googletag.defineSlot('/21848415/GoneGlobal_Leaderboard', [728, 90], 'doubleClickLeaderboardHeaderInternal-728-90').addService(googletag.pubads());
slot5 = googletag.defineSlot('/21848415/GoneGlobal_SmallSquare', [200, 200], 'doubleClickSmallSquareHeaderExternal-200-200').addService(googletag.pubads());
googletag.enableServices();
});
</script>
Run Code Online (Sandbox Code Playgroud)
下面是第二个脚本 - 这只是它的一部分(很长):
$(function() {
///////////////////////// Double Click AD Variables
var slot1 = googletag.defineSlot('/21848415/GoneGlobal_Square', [250, 250], 'doubleClickSquareIndex-250-250');
var slot2 = googletag.defineSlot('/21848415/GoneGlobal_Skyscraper', [160, 600], 'doubleClickSkyscraperIndex-160-600');
var slot3 = googletag.defineSlot('/21848415/GoneGlobal_Leaderboard', [728, 90], 'doubleClickLeaderboardIndex-728-90');
var slot4 = googletag.defineSlot('/21848415/GoneGlobal_Leaderboard', [728, 90], 'doubleClickLeaderboardHeaderInternal-728-90');
var slot5 = googletag.defineSlot('/21848415/GoneGlobal_SmallSquare', [200, 200], 'doubleClickSmallSquareHeaderExternal-200-200');
)};
Run Code Online (Sandbox Code Playgroud)
有没有办法阻止脚本运行另一个方法/函数加载?
我可以创建某种依赖吗?
如何确保顶部JS在底部之前加载?
此处的其他解决方案可能有效,但真正的问题与您使用DFP的方式有关.
DFP广告管理系统是异步加载的,因此在执行导致错误的脚本时,页面上不存在defineSlot方法.
您的所有DFP代码都应包含在googletag.cmd.push包装器中,该包装器将存储命令,直到加载DFP,然后以正确的顺序执行它们.
只需包装任何类似的DFP代码,都应修复错误:
googletag.cmd.push(function() {
// Double Click AD Variables
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5911 次 |
| 最近记录: |