【发布时间】:2011-07-02 09:23:01
【问题描述】:
我对 javascript 很陌生,这可能是我的问题所在。我正在尝试跟踪在我们网站上的小部件中发生的 AdWords 转化。用户填写表单,小部件的结果将在同一个 div 中发布,无需刷新页面。我遇到的问题是,当我尝试在 Google 代码(如下所示)中附加Child(或在 jQuery 中附加)两个脚本元素时,页面被 302 重定向到空白 Google 页面(或者至少通过 FireBug 看起来是这样) . 我能够为表单的结果提供回调方法,这就是我尝试插入 AdWords 跟踪代码的地方。供参考,这是谷歌提供的代码:
<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);
}
真正奇怪的是,当我只插入一个脚本标签(不管是哪一个)时,它不会重定向。只有当我尝试同时插入它们时它才会重定向。
我还尝试将第一个脚本标记放入原始页面代码中(因为它不会在任何地方进行任何调用,它只是设置变量)并仅插入 converts.js 文件,它仍然会进行重定向。
如果相关的话,我使用的是 Firefox 3.6.13,并且已经尝试使用 jQuery 1.3 和 1.5 包含的代码(在意识到我们使用的是 v1.3 之后)。
我知道我错过了什么!有什么建议?
【问题讨论】:
-
目前我(大概)通过将 adwords 代码转储到 iframe 并在回调发生时加载 iframe 来完成这项工作。不过,我敢肯定还有更优雅的方式。
-
无法克服
document.createElement('noscript');。大声笑 -
请注意,
$(...).html(...)函数将执行 JavaScript,但据我所知,主要问题是全局变量是使用“var”关键字定义的。我不确定 append() 函数是否也能正确运行脚本。无论如何,最好使用微观答案中的代码(但没有“var”关键字。) -
嗨,Alexis,我设置了一个测试页面,在页面头部声明了
var foo = 1234;,并在其自己的script中声明。然后,我用一些 Ajax 调用了jQuery('#myDiv').html('<script src="myTestScript.js"></script>');,发现是的,它能够访问foo的值,所以我不完全确定这是问题所在。 (是的,myTestScript.js 甚至在不同的域中) -
我之前的评论的一些后续:如前所述,我运行的测试确实可以访问我的变量,并发现我能够
alert它们就好了,等等,但有趣的是,我使用document.write的尝试没有没有 工作并且(请参阅我在此页面其他地方的other 评论)是为什么我怀疑这不会像我们希望的那样工作.. . 使用 iframe 是我在其他一些地方看到过的建议,所以我可能稍后再试,但现在我们将尝试只使用您通常在noscript块中看到的 1x1 隐藏像素,并且看看这对客户来说是否“足够好”......
标签: javascript jquery google-ads-api