Проблема с конверсионными сервисами 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

Изменять переменные очень просто! Самое сложное - заставить сценарий повторно выполняться с новыми переменными.

Любая помощь очень признательна!

ОБНОВЛЕНИЕ

Ответ, опубликованный здесь, вероятно, решает этот вопрос, однако я хотел бы знать, как я могу представить другие переменные с переменными, которые были упомянуты в этом ответе. Они довольно понятны, но я не могу быть уверен, что это так правильно!

Кроме того, кто-нибудь знает, где в Google я действительно могу увидеть инструкции для этого?

Author: Community, 2012-04-05

1 answers

Причина, по которой вы не можете просто повторно выполнить скрипт, как вы, возможно, заметили, заключается в том, что он использует 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);
 1
Author: dorian, 2012-07-24 14:27:36