JavaScript 加载顺序导致问题

2024-01-23

我在标头中有一个 JS 文件(这是用于 Google DFP 的),在</body>

我发现如果头 JS 文件没有在底部文件之前加载,我会在 Chrome 控制台中收到此错误:

 Uncaught TypeError: Object #<Object> has no method 'defineSlot' 

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>

下面是第二个脚本 - 这只是它的一部分(它很长):

$(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');
)};

有没有办法阻止脚本运行另一个加载的方法/函数?

我可以创建某种依赖关系吗?

如何确保顶部JS先于底部加载?


这里的其他解决方案可能有效,但真正的问题在于您使用 DFP 广告管理系统的方式。

DFP 广告管理系统是异步加载的,因此在执行导致错误的脚本时,您的页面上将不存在 DefineSlot 方法。

您的所有 DFP 广告管理系统代码均应包含在googletag.cmd.push包装器将存储命令,直到加载 DFP,然后以正确的顺序执行它们。

像这样简单地包装任何 DFP 代码,应该可以修复您的错误:

googletag.cmd.push(function() {
    // Double Click AD Variables

});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 加载顺序导致问题 的相关文章

随机推荐

  • Python UnicodeDecodeError:“utf8”编解码器无法解码字节...意外的代码字节

    Python 新手构建他的第一个 Web 应用程序的旅程 应用程序链接 http contractpy appspot com http contractpy appspot com 这只是一个实验性应用程序 遵循a的建议堆栈溢出用户 ht
  • 为什么从 ControllerBase 与 Controller for ASP.NET Core Web API 派生?

    我正在按照本教程创建 ASP NET Core Web API 并且在添加控制器的部分中 本教程提供了用于替换控制器模板代码的代码 真正引起我注意的事情之一是在模板代码中 我得到 TodoController Controller 然后在我
  • 使用按钮打开另一个模块表单视图

    我正在尝试打开另一个模型表单视图 但收到错误外部 ID 未找到 在 py文件中 class ru assignments models Model name ru assignments class ru assignments sub m
  • 0022 和 022 之间的 umask 区别 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 umask 和 umask 有什么区别吗0022 and 022 我想将我的 umask 更改为022 我该怎么做 umask 没有区别0022和 u
  • 如何在 Azure 移动服务部署上使用最新的 npm

    我当前使用的 Azure 移动服务映像已锁定到 npm 版本 1 2 30 映像上安装了最新的 npm 版本 位于 Program Files x86 npm 下 但是 npm 被锁定到版本 1 2 30 因为它是与 node js 一起安
  • 当我想要存储从下拉列表中选择或用户输入的值时,数据库设计的最佳实践是什么?

    我正在尝试找到设计数据库的最佳方法 以便允许出现以下情况 向用户呈现大学的下拉列表 例如 用户从列表中选择他 她的大学 如果存在 如果该大学不存在 他应该在文本框中输入自己的大学 有点像其他 例如 考虑到我可能想使用大学 ID 进行排序 可
  • Tensorflowdynamic_rnn参数含义

    我正在努力理解神秘的 RNN 文档 任何有关以下内容的帮助将不胜感激 tf nn dynamic rnn cell inputs sequence length None initial state None dtype None para
  • 有构建 Xcode 4 插件的文档吗?

    最近我注意到几个项目github http github com通过插件扩展 Xcode 4 的功能 两个项目为例 olemoritz http twitter com olemoritz 迷你Xcode https github com
  • 当时间更改或结束时,Firefox 会在视频上触发“暂停”事件

    我在网站上嵌入了一个视频 但我在 Firefox 中遇到了一些奇怪的行为 每次我通过单击时间滑块更改播放位置时 pause事件被触发 同样 每次视频结束时pause事件被触发 甚至在ended event 我首先想知道我编写的一些JS是否有
  • 是否可以使用标准 android api 在屏幕上移动组件?

    我想制作一个android用户界面 允许用户移动添加components widgets通过选择它们然后拖动它们来在屏幕上移动 使用标准的 android api 可以吗 是的 这取决于您想要实现的目标 可以办到using标准 API 但此
  • 我需要打开哪些防火墙端口才能允许 Sinch 和 WebRTC 工作?

    Sinch 在互联网和各种 NAT 网络上运行得非常好 但我刚刚尝试了企业防火墙后面的设备 突然我们无法拨打电话 更具体地说 设备可以互相呼叫 但是当调用 onCallEstablished 时 音频流已连接 呼叫就会中断 听不到来自远端的
  • 防止渲染阻塞 CSS

    我有一个从 CDN 引用 Bootstrap 4 的网页 在里面head在我的 HTML 页面中 我有以下内容 这是我引用的唯一 CSS 然而 当我运行 Google 的 PageSpeed 工具时 出现以下错误 消除首屏内容中阻碍渲染的
  • 如何使用 JavaScript 按钮删除 gridview 上的一行并保留在同一页面上

    我正在通过 gridview 显示一组记录 并且edit and delete旁边的按钮 我在记录删除部分遇到问题 我想要的行为如下 用户单击按钮 调用 JavaScript 验证函数 单击按钮后记录将被删除 但用户与其余记录仍保留在同一页
  • 如何以编程方式操作 Windows 桌面图标位置?

    几年前 我天真地尝试编写一个小应用程序来保存我战术性放置的桌面图标 因为当某些事件重置它们时 我厌倦了将它们拖回原来的位置 在花费了太多时间未能找到一种方法来查询 更不用说保存和重置 我的图标的桌面位置后 我放弃了 有人知道 Windows
  • 如何使用 Rust 从 stdin 创建高效的字符迭代器?

    现在既然Read chars https doc rust lang org nightly std io trait Read html method chars迭代器已被正式弃用 https github com rust lang r
  • 如何从字符串中删除所有子字符串

    如何从字符串中删除该模式的所有实例 string str red tuna blue tuna black tuna one tuna string pattern tuna 从字符串中删除该模式的所有实例 include
  • java中抽象类和接口的最佳实践

    因此 您已经有了一个接口和一个实现接口中方法的子集的抽象类 您还拥有一些继承抽象类并提供抽象类未提供的方法的实现的类 那么这里的最佳实践是什么 我正在谈论这样的问题 1 抽象类应该实现接口还是它的子类 每节课都应该吗 在我看来 抽象类就应该
  • 将 MS Word 表格单元格提取为图像?

    我需要将表格单元格提取为图像 单元格可能包含混合内容 文本 图像 我需要将其合并为单个图像 我能够获得核心文本 但我不知道如何获得图像 文本 不确定 Apac POI 是否有帮助 之前有人做过类似的事情吗 public static voi
  • 使用 WPF 时的数据绑定问题

    我一直在努力学习Visual C 最近 我一直在关注WPF 这是我一直在制作的教程的链接 http msdn microsoft com en us library vstudio ms752299 v vs 110 aspx http m
  • JavaScript 加载顺序导致问题

    我在标头中有一个 JS 文件 这是用于 Google DFP 的 在 我发现如果头 JS 文件没有在底部文件之前加载 我会在 Chrome 控制台中收到此错误 Uncaught TypeError Object has no method