【问题标题】:How To Make Adsense Load When Cookie Consent Given?获得 Cookie 同意后如何加载 Adsense?
【发布时间】:2020-04-30 22:31:23
【问题描述】:

网站设置为选择接受 cookie 同意,但当第一次访问者单击接受 cookie 按钮时,除非刷新整个页面,否则不会加载 adsense 代码。

有没有办法实现在点击 cookie 接受按钮后加载广告而不必刷新整个页面?

使用这个cookie同意jquery插件:IHaveCookies

这是我正在使用的允许加载 AdSense 的代码的一部分:

    $(document).ready(function() {
    $('body').ihavecookies(options);

if ($.fn.ihavecookies.preference('ads') === true) {
    var src = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js";
    var newScript = document.createElement("script");
    newScript.type = "text/javascript";
    newScript.setAttribute("async", "true");
    newScript.setAttribute("src", src);
    document.body.appendChild(newScript);
}

上面的代码确实有效,但在页面刷新之前它不允许广告出现。 是否可以在上述代码中添加“刷新”属性,以使广告在“ihavecookies.preference('ads') === true)”上加载而不刷新页面?

我实现这个的网站可以查看Here

fyi....目前没有为欧盟或加利福尼亚访问者加载广告(但这是一个单独的问题,本主题不讨论)

【问题讨论】:

标签: javascript jquery cookies adsense cookieconsent


【解决方案1】:

与您使用的插件没有直接关系,但我的回答有望引导您走向正确的方向。首先,有两个 AdSense 帮助页面可能会对您有所帮助:

Google 发布商广告代码中的广告个性化设置: https://support.google.com/adsense/answer/7670312

广告个性化设置的广告代码示例: https://support.google.com/adsense/answer/9042142

我在 AdSense 中使用我的自定义 cookie 同意解决方案(我使用带有非个性化选项的自动广告),这就是我正在做的事情:

1.我将以下代码放在<head> 标记之间,在将显示广告的页面上:

编辑:仅在获得同意的情况下/之后才将以下内容添加到您的页面中。 (感谢@Avatar)

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=1;</script>

这会加载 AdSense JS 文件,但会暂停广告加载,因此不会放置任何 cookie。

2. 在我控制显示/隐藏同意横幅的 JS 文件中,我将以下代码放入这些操作中:a) 用户通过单击确定表示同意,b) 如果同意则加载新页面之前已经给出:

(adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=1;
(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=0;
(adsbygoogle=window.adsbygoogle||[]).push({google_ad_client:'ca-pub-YOUR-ADSENSE-ID',enable_page_level_ads:true});

如果您使用个性化广告,您可以删除第一行。

在其他情况下不加载广告(例如,用户什么都不做、用户点击 REJECT、加载用户之前拒绝的新页面)。我确实放置了一个 cookie 来跟踪拒绝,以便在每次页面加载时都不会显示同意横幅。

【讨论】:

  • 已在未经用户同意的情况下加载域pagead2.googlesyndication.com违反数据隐私法规。您只能在用户同意后加载其他域(单击“接受 Cookie”按钮)。
  • @Avatar 感谢您的来信。最好只有在同意后才加载它。如果是因为是广告相关的外部资源,你有清楚的想法吗?我的意思是,例如,如果我的网站上没有广告,但使用 jquery 或字体或图像等,并从外部域包含它们,我是否还应该在加载这些外部资源之前征求用户同意?如果您还记得与此相关的法规中的具体条款,那就太好了。
  • 如果您在欧盟境内,答案是肯定的。对于对另一个域的每个请求,都可以跟踪用户,这是不合法的。我注意到目前还没有多少人意识到这一点。脚本/字体/图像应从您自己的域加载,而不是从外部域加载。
【解决方案2】:

最简单的方法之一:

  1. 将所有 AdSense 脚本标签更改为 type="text/plain"
  2. 访问者接受cookies后,将类型改为type="text/javascript"
  3. 执行代码

您还希望存储 cookie 接受,以便下次可以立即触发 adsense。


另见:

【讨论】:

    【解决方案3】:

    这太棒了,非常感谢!如果您在本地托管 adsbygoogle.js,则在用户接受之前不会与美国建立非法连接。

     <script async src="adsbygoogle.js"></script>
     <script>(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=1;</script>
    

    在德国,即使在未经用户许可的情况下从美国加载谷歌字体现在似乎也是非法的:https://www.itmagazine.ch/artikel/76437/Deutsches_Gericht_erklaert_Einbindung_von_Google_Fonts_als_rechtswidrig.html

    这是一种仅在允许的情况下加载 Analytics 的方法:https://stackoverflow.com/a/45838784/12668719

    更新:我已经测试过了,不幸的是它仍然连接到美国

    还有什么想法吗? Loading Google Adsense, Analytics and Youtube only when consent is given

    更新:同意 OK 后动态加载 Google Adsense:setTimeout("adsenseladen()", 1);

     <script type="text/javascript">
     function adsenseladen() {
     var script = document.createElement('script');
     script.type = 'text/javascript';
     script.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
     document.body.appendChild(script);
     }
     </script>
    
    
     <ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-##########"
     data-ad-slot="##########"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
    
     <script>
     (adsbygoogle = window.adsbygoogle || []).push({});
     </script>
    

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2012-07-29
      • 1970-01-01
      相关资源
      最近更新 更多