2012-04-05 54 views
2

我从未在网站上实施Google Adwords,因此如果我对“行话”不正确,请随时纠正我。Google AdWords转换服务问题 - 异步转换代码

我正在为其Google AdWord广告系列的某个目标网页提供服务。在这个页面上有一个表格,在处理完成后,你会转到另一个页面说'谢谢你的请求...'。我已经删除了这个,并在PHP和Javascript中重写它,以防止页面刷新或重定向。

我遇到的问题是,在“谢谢”页面上,Google代码略有不同,并且在加载页面时执行。 我的问题是,如何在不重新加载页面的情况下重新执行具有不同变量的转换代码?有这个Google脚本吗?

将删除脚本标记,然后再次放置它重新执​​行脚本?

这是代码我现在有(表单提交前):

<!-- Google Code for Company Remarketing List Remarketing List --> 
<script type="text/javascript"> 
    /* <![CDATA[ */ 
    var google_conversion_id = 000000; 
    var google_conversion_language = "en"; 
    var google_conversion_format = "3"; 
    var google_conversion_color = "ffffff"; 
    var google_conversion_label = "abcdefg"; 
    var google_conversion_value = 0; 
    /* ]]> */ 
</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/000000/?label=abcdefg&amp;guid=ON&amp;script=0"/> 
    </div> 
</noscript> 

需要表单提交后,要改变的事情是:

var google_conversion_id = 111111; 
var google_conversion_label = "gfedcba"; 
"http://www.googleadservices.com/pagead/conversion/gfedcba/?label=111111&amp;guid=ON&amp;script=0 

更改变量简单!困难的部分是让脚本重新执行新的变量。

任何帮助非常感谢!

UPDATE

答案公布here可能解决了这个问题,不过,我想知道我怎么可以与用在该答复中提到的变量提交的其他变量。他们很自我解释,但我不能确定他们是对的!

此外,有没有人知道在谷歌上我可以真正看到这方面的指示?

回答

1

您不能重新执行脚本的原因是 - 您可能已经注意到 - 它使用document.write,它不应在文档已加载后调用。

正如你所提到的,一个可能的解决方案就是自己发出GIF请求。如果你真的想重新执行脚本,可以重定向document.write

下面是如何做到这一点的一般想法 - 这个片段将放置在您将新内容重新加载到页面的某处。它假设您使用jQuery并且已经将新页面内容加载到$newContent中并标记了所有需要在class="ajax-exec"上重新加载时执行的脚本标记。它的作用是直接执行内联脚本,并使用jQuery的$.ajax函数和dataType: script。然后等待所有外部脚本执行完毕并将重定向的输出附加到隐藏的div

这为我们工作,但不附带保修(:

// Execute js from the new content (e.g. AdWords conversions tags). 
// We redirect document.write to a string buffer as we're already 
// done loading the page at this point. 
var buf = ''; 
var writeMethSave = document.write; 
$('div#lazyload-buf').remove(); 
var done = {}; 

document.write = function (string) { 
     buf += string; 
}; 

$newContent.filter('script.ajax-exec').each(function() { 
    var url = $(this).attr('src'); 
    if (url) { 
     // External script. 
     done[url] = false; 
     $.ajax({ 
      url: url, 
      dataType: "script", 
      success: function() { 
       done[url] = true; 
      } 
     }); 
    } else { 
     // Inline script. 
     $.globalEval($(this).html()); 
    } 
}); 

function checkForDone() { 
    for (var url in done) { 
     if (!done[url]) { 
      setTimeout(checkForDone, 25); 
      return; 
     } 
    } 
    // All done, restore method and write output to div 
    document.write = writeMethSave; 
    var $container = $(document.createElement("div")); 
    $container.attr('id', 'lazyload-buf'); 
    $container.hide(); 
    $(document.body).append($container); 
    $container.html(buf); 
}; 

setTimeout(checkForDone, 25);