我对javascript很新,其中可能存在我的问题 . 我正在尝试跟踪我们网站上的小部件中发生的AdWords转化 . 用户填写表单,并且窗口小部件的结果将在相同的div中发布,而不会刷新页面 . 我遇到的问题是,当我尝试在Google的代码中将appendChild(或附加在jQuery中)两个脚本元素(如下所示)时,页面被重定向到一个空白的Google页面(或者至少通过FireBug看起来像这样) . 我能够为表单的结果提供回调方法,而这正是我尝试插入AdWords跟踪代码的地方 . 作为参考,这是Google提供的代码:
<script type="text/javascript">
/* <![CDATA[ */
var google_conversion_id = 993834405;
var google_conversion_language = "en";
var google_conversion_format = "3";
var google_conversion_color = "ffffff";
var google_conversion_label = "bSpUCOP9iAIQpevy2QM";
/* ]]> */
</script>
<script type="text/javascript" src="http://www.googleadservices.com/pagead/conversion.js">
</script>
<noscript>
<div style="display:inline;">
<img height="1" width="1" style="border-style:none;" alt="" src="http://www.googleadservices.com/pagead/conversion/993834405/?label=bSpUCOP9iAIQpevy2QM&guid=ON&script=0"/>
</div>
</noscript>
很标准的东西 . 所以,我想要做的是使用回调方法(提供)将其插入结果页面 . 坦率地说,无论我何时尝试使用js或jQuery(无论是在原始页面加载还是在回调中)插入此代码,我都会重定向,因此可能回调位无关紧要,但这就是为什么我不只是将其粘贴到页面的代码 .
我已经尝试了很多不同的方法来做到这一点,但这就是我现在拥有的东西(请原谅这种邋 . . 现在只是试图破解我的方式!):
function matchResultsCallback(data){
var scriptTag = document.createElement('script');
scriptTag.type = "text/javascript";
scriptTag.text = scriptTag.text + "/* <![CDATA[ */\n";
scriptTag.text = scriptTag.text + "var google_conversion_id \= 993834405\;\n";
scriptTag.text = scriptTag.text + "var google_conversion_language \= \"en\"\;\n";
scriptTag.text = scriptTag.text + "var google_conversion_format \= \"3\"\;\n";
scriptTag.text = scriptTag.text + "var google_conversion_color \= \"ffffff\"\;\n";
scriptTag.text = scriptTag.text + "var google_conversion_label \= \"bSpUCOP9iAIQpevy2QM\"\;\n";
scriptTag.text = scriptTag.text + "/* ]]> */\n";
$('body').append(scriptTag);
$('body').append("<script type\=\"text\/javascript\" src\=\"http://www.googleadservices.com/pagead/conversion.js\" />");
//I have also tried this bit above using the same method as 'scriptTag' with no luck, this is just the most recent iteration.
var scriptTag2 = document.createElement('noscript');
var imgTag = document.createElement('img');
imgTag.height = 1;
imgTag.width = 1;
imgTag.border = 0;
imgTag.src = "http://www.googleadservices.com/pagead/conversion/993834405/?label=bSpUCOP9iAIQpevy2QM&guid=ON&script=0";
$('body').append(scriptTag2);
$('noscript').append(imgTag);
}
真正奇怪的是,当我只插入一个脚本标签(无论哪一个)时,它不会重定向 . 它只在我尝试插入它们时重定向 .
我还尝试将第一个脚本标记放入原始页面代码中(因为它不在任何地方进行任何调用,它只是设置变量)并且只插入conversions.js文件并且它仍然执行重定向 .
如果它是相关的我正在使用Firefox 3.6.13,并尝试了包含jQuery 1.3和1.5的代码(在实现我们使用v1.3之后) .
我知道我错过了什么!有什么建议?
12 回答
如果您使用getScript方法在设置所需变量后轮询转换跟踪脚本?
这是我通常做的,一旦我从我的AJAX调用中收到 success response .
这对我来说很好 . 如果你想要一个更详细的例子:
如果您使用其他库,如Mootools或Prototype,我相信他们有类似的内置方法 . 这种AFAIK是最干净的方法之一 .
现在可以方便地使用
http://www.googleadservices.com/pagead/conversion_async.js
上的异步标记来公开window.google_trackConversion
函数 .此功能可以随时使用 . 例如,在提交表单之后,就像你的情况一样 .
请参阅https://developers.google.com/adwords-remarketing-tag/asynchronous/
更新2018年
情况发生了变化,现在gtag.js似乎有更多选择:https://developers.google.com/adwords-remarketing-tag/
这个简单的代码对我有用($ .getScript版本没有) .
//这为jQuery负责 . 代码可以很容易地适应其他JavaScript库:
//你可以在你的脚本中调用它,就像这样:
在您的Adwords帐户中 - 如果您将转化跟踪事件更改为“点击”而不是“页面加载”,它将为您提供创建功能的代码 . 它会创建一个这样的代码段:
然后在你的代码中你只需要调用:
或者对于链接或图像点击:
尝试了一切后,Funka提供的链接(http://articles.adamwrobel.com/2010/12/23/trigger-adwords-conversion-on-javascript-event)对我有用 . 就像他说覆盖document.write一样可怕,但似乎这是你必须要做的,除非你可以在页面加载之前加载脚本 .
由于脚本使用
document.write
所以需要重写它见https://gist.github.com/c7a316972128250d278c
如您所见,Google转换代码只会调用重绘 . 我必须确保在重绘页面的一部分时调用它 . (由于目前我无法修复的一些糟糕的网站设计 . )所以我写了一个函数来调用onClick事件 .
基本上,你所要做的就是调用doConversion();
以下是我们最终得到的结果:
我尝试了所有方法手动包含conversion.js,它都加载了脚本,但没有进一步执行我们在脚本中所需的内容,这是一个简单的解决方案 .
只需将转换代码放在单独的HTML中,然后将其加载到iframe中即可 .
我发现代码在http://www.benjaminkim.com/这样做似乎运作良好 .
然后只需在你想要记录的JS中调用ppcconversion()它 .
我所做的就是返回代码(或者在我们的例子中,一个图像)以及回调中的“success”消息 .
当提交联系表格或填写并提交注册表格时,我们使用jQuery发布到php脚本,然后向div输出“thank-you”消息:
...接下来是Google提供的1x1 gif .
这是jQuery:
和PHP ...
如果没有被谷歌选中,你可能需要输入“
document.location.reload();
”For anyone still looking for a good solution to this, Google supports AJAX Conversions natively now through their Google Analytics API.
您可以通过在Google Analytics中进行事件API调用来完成此操作 . 您要做的是设置Google Analytics事件,将其与目标联系起来,然后将该目标作为转化导入AdWords . 这是一个漫长的过程,但它是一个干净的解决方案 .
Check out This Page for a tutorial
这对我有用: