提问人:Nuno 提问时间:12/16/2022 最后编辑:Nuno 更新时间:12/26/2022 访问量:1778
为什么__tcfapi不能在CONSENT_DATA_READY上定义?
Why would __tcfapi not be defined on CONSENT_DATA_READY?
问:
我拥有此代码多年,使用 Google Funding Choices 实施 TCFv2 cookie 同意。
window.googlefc.callbackQueue.push({
'CONSENT_DATA_READY': function () {
/* __tcfapi is undefined!! */
return __tcfapi('addEventListener', 2, function (tcData, success) {
if (success
&& tcData.gdprApplies
&& (tcData.eventStatus === 'tcloaded' || tcData.eventStatus === 'useractioncomplete')
&& tcData.purpose.consents[1]) {
...
}
});
}
});
它在 99.99% 的时间内都有效,它看起来是这样。
但是,今天,我的一个 Chrome 配置文件似乎已经“损坏”了,因为每当触发此事件时,.CONSENT_DATA_READY
__tcfapi is not defined
我尝试了很多事情,比如确保所有扩展程序都被禁用,关闭 Chrome 并重新打开它,只清除我域的 cookie 等,但没有任何效果。所有其他 Chrome 配置文件一直运行良好。
我比较了两个 Chrome 配置文件(在同一网页上)之间的 DevTools 中的“源”选项卡,并且运行良好的配置文件加载了更多脚本并加载了 iframe(特定于 TCF 的 iframe)。
只有当我清除了所有 cookie(包括“google.com”范围的 cookie)时,这个问题才得到解决。
--
我刚刚发布了一段临时代码,用于检查该位置是否未定义并将其报告给服务器(此测试完成后,此用户数据将被完全删除),并且我看到我的一小部分用户现在遇到了这个问题。__tcfapi
编辑 12 月 18 日 - 到目前为止,报告了 181 个不同的欧洲用户。
--
我无法通过做一些研究找到任何解决方案。我在 Reddit 上发现有人(在评论中)遇到了与我相同的问题,他们通过删除事件来“解决”。报告问题的其他地方似乎是一个略有不同的错误,例如 ,这不是我遇到的问题。__tcfapi
__tcfapi is not a function
--
这看起来像是 Google Funding Choices 的一个错误,但是有没有人知道如何“自动修复”这个问题,或者我能做些什么才能让这些用户停止收到此错误并按预期进行?
答:
铌:这是一次完整的重新编辑,以反映与提问者的讨论。
一些想法。
在错误 2.1a 上
我首先怀疑您的问题可能与错误 2.1a 相对应,您指出的 GFC 社区线程中的讨论也表明了这一点。建议的官方解决方案是先检查是否返回。getTCData
TCData.eventStatus = 'tcloaded'
这在其他情况下可能有效,但是您指出 - 并添加了相应的代码 - 您已经检查过,但是似乎甚至在创建该标志之前就发生了未定义的问题。tcloaded
__tcfapi
再看看问题的根源
2020 年的 GFC 社区线程、TCFv2 标准化历史以及线程已被关闭的情况表明,该问题主要存在于 Google Funding Choices 中最终实现 TFCv2 之前。这与所描述的行为在以下方面违反 TCFv2 规范的事实相对应:
每个同意管理器都必须提供以下 API 函数:.该函数必须始终是一个函数,不能是任何其他类型,即使只是在初始化时暂时 - API 必须能够始终处理调用。
__tcfapi(command, version, callback, parameter)
__tcfapi
但是,仍然有一些较旧的实现在野外,这可能会在某些客户端上导致此问题,这并非没有道理。
有趣的是,您观察到您的一个 Chrome 配置文件以所述方式“损坏”,只有清除所有 cookie(包括“google.com”范围的 cookie)才能解决问题。
现在?
首先,检查一下会很有趣
- 由有问题的客户端使用,以及
tcfPolicyVersion
- 暂时“损坏”的 Chrome 配置文件与其他工作配置文件之间的差异。
在官方网站上查看有关Publisher与IAB TCF v2.0集成的信息也没有什么坏处,以防隐藏一些我们目前忽略的有用宝石。
另一方面,随着时间的流逝,这个问题(可能很少见)很可能会自行解决
- 所有客户端都已更新并支持 TCFv2 的最终实现,和/或
- 受影响的用户要么有一天会自行删除所有 Google 域 Cookie,要么超时后会引入新的 Cookie。
似乎可以合理地假设,您当前的补丁 - 检查是否未定义 - 可能确实是一个(公平的)合适的修复程序,至少目前是这样。__tcfapi
评论
tcData.eventStatus === 'tcloaded'
__tcfapi('addEventListener', 2, function (tcData, success) {
__tcfapi
'CONSENT_DATA_READY': function () {
tcloaded
tcData
__tcfapi
评论