jQuery将Google Adsense添加到div中。

21

我在使用 Google AdSense 时遇到了问题,它会在我的 jQuery 加载前加载并破坏我的代码,因此我想尝试使用文档准备函数将 Google AdSense JavaScript 添加到适当的 div 中,以下是我正在尝试编写的代码:

<script language="javascript" type="text/javascript">
$(document).ready(function(){
    $(".googleBanners").html("<script language='javascript' type='text/javascript'>\n" + "google_ad_client = 'pub-8487967187298044';\n" + "google_ad_slot = '1088799521';\n" + "google_ad_width = 250;\n" + "google_ad_height = 250;\n" + "</" + "script>\n" + "<script language='javascript' src='http://pagead2.googlesyndication.com/pagead/show_ads.js' type='text/javascript'>" + "</" + "script>");
});
</script>

但我不太擅长编写JavaScript/jQuery,所以如果有人可以帮我实现这个功能,那就太好了。

我现在在Firefox中得到的错误是“错误:google_protectAndRun未定义”。我不确定这意味着什么,但我猜测我可能错误地编写了jQuery代码..哈哈


好的,所以我尝试了另一种方法,但仍然遇到了同样的错误。我在Joomla中创建了一个组件,只显示Google广告代码-http://www.sportsneo.com/google-ads我想使用Ajaxify调用它-对于我做过的其他具有ajax内容的网站来说,这很有效,但由于某种原因,这个Google Adsense代码让我很头疼。http://www.sportsneo.com/fantasy-killed-my-hsc <- Google Adsense代码应该加载的页面(右侧),在FF中它转到一个空白页面并显示错误,在IE中则不会在其应该放置的框中显示任何内容.. :( - SoulieBaby
9个回答

24

我这样做的方法是在我想让广告出现的地方设置一个占位符。

<html>
   <body>
      <div id="googleadgoeshere"></div>
   </body>
</html>

然后将 Google 代码放置在页面末尾的容器中。

<div id="adsense" style="display:none;">all the google javascript goes here</div>

我随后使用jQuery来移动iframe,这个iframe是由AdSense代码在页面加载完成后创建的。

$(window).load(function(){
    $("#adsense").find("iframe").appendTo("#googleadgoeshere"); 
    $("#adsense").remove();
});

如果你尝试移动#adsense div,你最终会得到一个空白页面。 如果你试图以其他任何方式移动它,你也会得到一个空白页面。 Google已经内置了活性方法来检查代码是否被移动。 如果移动了它,你的页面将是空白的。 为什么Google这样做我不清楚,但我发现这个解决方法对我有效...


13
谷歌对此的政策是什么?您是否违反了 AdSense 服务条款? - Scott Whitlock
2
我同意Scott所说的。有人需要澄清这是否违反了AdSense的服务条款,因为我们不应该对AdSense代码进行任何更改。 - Sangram Nandkhile
1
有人在AdSense论坛上询问过这是否违反了Google AdSense政策吗? - suraj jain
1
这对我来说几乎可以工作。不知何故,在appendTo之后,广告最终出现在页面的左上角。它确实将其移动到googleadgoeshere,但它不会显示该div的位置。 - Tom Kincaid
另外一个问题是广告脚本只在第一页加载时执行。它不会在后续页面上执行或显示。 - Tom Kincaid
Tom,要解决你的第一个问题,请确保你放置广告的 div 元素具有除 inherit 以外的 position 属性值。 - Zack Brady

3

谢谢提供链接,我在来这里之前就尝试过了,但不知何故AdSense代码会在IE中影响我的其他jQuery脚本.. :/ 我会看看getScript的东西.. :) - SoulieBaby

1
在页面中添加一个带有AdSense代码的隐藏DIV:
<div id='adsense' style="display:none">
    <script type="text/javascript"><!--
        google_ad_client = "ca-pub-xxxxxxxxxxxxxx";
        google_ad_slot = "xxxxxxxxxx";
        google_ad_width = 300;
        google_ad_height = 250;
        //-->
    </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div>

使用JavaScript创建动态DIV,用于加载您的广告:
$("body").append("<div id='adslot' ></div>");

Jquery代码用于插入广告:
var ad = $("#adsense").html();
$("#adslot").html(ad);

这对我有效。


我如何为Google广告生成一个随机位置呢?例如,我有10个文章项目,想要其中的2个随机替换成Google广告。我该如何做呢 @krisrak? - Ana DEV

1

在尝试并失败了这里的代码后,我最终将我正在使用的jQuery对象放入一个新的HTML页面中。一旦我这样做了,我只是使用iframe将其放置在带有AdSense的页面上。

现在,AdSense和jQuery同时运行,没有任何问题。


0

这是我会做的方式。简单而且简短。

<script>
$(window).load(function(){
    $('#adsense').fadeIn(0);
});
</script>

<div id="adsense" style="display:none;">
   [YOUR ADSENSE SCRIPT HERE]
</div>

0
Danny的回答解释了这个问题的基本解决方案,而我在自己不成功的尝试后需要更详细的解决方案,所以谢谢!然而,我需要一个更详细的解决方案,因为我有一个未知数量的广告要在给定页面上替换,所以这是我做的:
基本的html(php)大纲,ala Danny的格式--注意我的广告计数增加,基于来自db查询的各种行的各种因素,即不可能预先知道计数:
<html>
   <body>
<? while ($r = mysql_fetch_assoc($rs)) { if (true) { ?>
      <div class="adslide"><?=$ads++?></div>
<? } } ?>
   </body>
</html>

我将要创建的adsense div的css分离出来,因为我已经为上面创建的每个adslide div都有一个:

<style> .adsense { display: none; } </style>

这里,位于页面底部,我将实际的谷歌广告插入到HTML中,其数量由上方可用插槽的数量决定:

<?php for ($i = 0; $i < $ads; $i++) { echo '<div class="adsense">'.$adscript.'</div>'; } ?>

最后,我循环遍历所有写入HTML的AdSense广告,并逐个填充到在HTML中创建的adslide插槽中,确保每个广告和插槽仅被使用/填充一次,通过删除它们或其类别来完成它们的使用:
<script>
// https://dev59.com/9HM_5IYBdhLWcg3w-4dg
$(function () { var b, a = $(".adsense").first();
 for (; a.length > 0; a = $(".adsense").first())
 { b = $(".adslide").first(); b.append(a.find("iframe"));
  a.remove(); b.removeClass("adslide"); } });
</script>

这是来自谷歌的一个极其奇怪的bug。我只能假设它与一些保护机制有关,防止人们隐藏他们的广告(通过将它们放置在屏幕外或其他HTML元素后面等)以尝试收集印象计数而不实际显示广告(即您可以在HTML中放置数百万个这样的广告,但用户永远看不到它们,而您会收集现金,直到谷歌发现)。然而,这个bug没有出现在IE和Safari中,但在Firefox和谷歌自己的Chrome中却出现了……这很奇怪。他们肯定应该在他们这边修复这个问题。
对于那些使用相同软件的人:当我实现一个具有与用户提交的照片混杂在旋转木马中的广告(http://sorgalla.com/projects/jcarousel/)时,我遇到了这个问题。

0

只有这段代码有效

var i = 0;
obj = $(".materialContent p");
size = obj.size();
for (i=0; i<size; i++)
{
    cur = obj[i];
    if (i == 2)
    {
        $("#mainTopAdvDiv").appendTo(cur); 
    }
}

请勿删除,移动整个 div。


0

我曾经遇到过完全相同的问题。最终,我通过使用jQuery加载一个带有指向包含Google AdSense JavaScript的HTML文件的src的<iframe>来解决它。这相当不优雅,因为Google AdSense代码创建了一个<iframe>。而且,我碰巧正在使用Facebook应用程序,所以在我的情况下,我在一个<iframe>(Google广告)中使用了一个<iframe>(我用来解决Firefox错误的那个)中使用了一个<iframe>(我的Facebook应用程序)。但是,它有效。


只是一个建议,学习如何使用后编辑工具将您的HTML标记突出显示为代码(以及任何代码)。然后您的帖子就会有意义 :) - jaywon

0
在通过 ajax 加载的页面的 link 中,我设置了 data-ajax="false",然后在加载的页面上要求用户使用返回按钮。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接