Как динамически изменять поисковую фразу Amazon Search Ads с помощью Wix Corvid?

#javascript #amazon #velo

#javascript #velo #amazonads

Вопрос:

Я хочу иметь виджет Amazon Search ads на странице блога.

Когда я использую сгенерированный Amazon код непосредственно в разделе «код» «HTML iFrame», он работает отлично.

Код выглядит следующим образом:

 <script type="text/javascript">
    amzn_assoc_placement = "adunit0";
    amzn_assoc_search_bar = "true";
    amzn_assoc_tracking_id = "atmarhoreca-20";
    amzn_assoc_search_bar_position = "bottom";
    amzn_assoc_ad_mode = "search";
    amzn_assoc_ad_type = "smart";
    amzn_assoc_marketplace = "amazon";
    amzn_assoc_region = "US";
    amzn_assoc_title = "Shop Related Products";
    amzn_assoc_default_search_phrase = "product";
    amzn_assoc_default_category = "All";
    amzn_assoc_linkid = "ae6ccb4140ba25fbef6d6ba67d36b98d";
</script>
<script src="//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US"></script>
  

В corvid я получаю заголовок сообщения в блоге и отправляю его в HTML-элемент с помощью:

 $w.onReady(function () {
 loadSearchAds();
});
async function loadSearchAds() {
 let getPostData = await $w('#post1').getPost();
 let postTitle = getPostData.title;
 $w('#html2').postMessage(postTitle);
}
  

Я должен отправить сообщение элементу HTML, чтобы установить переменную «amzn_assoc_default_search_phrase» в качестве заголовка сообщения, чтобы показать результаты поиска, связанные с блогом.

Я не так хорош в JavaScript. Попробовал следующий фрагмент HTML, но не смог справиться:

 <script type="text/javascript">
      window.onmessage = (event) => {
            if (event.data) {
                  searchPhrase = event.data;
            } else {
              searchPhrase = "horeca";
        }
      };
      amzn_assoc_placement = "adunit0";
      amzn_assoc_search_bar = "true";
      amzn_assoc_tracking_id = "atmarhoreca-20";
      amzn_assoc_search_bar_position = "bottom";
      amzn_assoc_ad_mode = "search";
      amzn_assoc_ad_type = "smart";
      amzn_assoc_marketplace = "amazon";
      amzn_assoc_region = "US";
      amzn_assoc_title = "Shop Related Products";
      amzn_assoc_default_search_phrase = searchPhrase;
      amzn_assoc_default_category = "All";
      amzn_assoc_linkid = "ae6ccb4140ba25fbef6d6ba67d36b98d";
</script>
<script src="//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US"></script>
  

Надеюсь, это понятно. Любая помощь будет оценена.

Спасибо.

Ответ №1:

Есть решение, к которому я пришел после стольких попыток.

Я понял, что когда страница загружается, await $w('#post1').getPost(); загружается медленнее, чем $w("#html2").postMessage(searchCommand); .

Поэтому я решил дать странице некоторое время, чтобы понять, каково ее название.

1 секунды недостаточно, но 2 секунд достаточно. Я жду 2 секунды, затем отправляю заголовок сообщения в элемент HTML.

Код Corvid выглядит следующим образом:

 $w.onReady(function () {
    loadSearchAds();
});

async function loadSearchAds() {
 let getPostData = await $w('#post1').getPost();
 let postTitle = getPostData.title;
 let searchCommand = "pageRequests<:>"   postTitle;
    setTimeout(function () {
        $w("#html2").postMessage(searchCommand);
    }, 2000);
}
  

Кроме того, другой проблемой была часть HTML. В коде, сгенерированном Amazon, есть 2 тега, один из которых — text / javascript, другой — src. Когда я присваиваю значение переменной в первом теге, второй тег использует переменную как есть перед назначением новой переменной.

Итак, я перешел к URL-адресу, который записан в, я скопировал туда все (около 25 тыс. символов) и вставил в первый тег, после присвоения переменных.

 <script type="text/javascript">
window.onmessage = (event) => {
    var splittedEventData = event.data.split("<:>");
    if (splittedEventData[0] == "pageRequests") {
     
        amzn_assoc_placement = "adunit0";
        amzn_assoc_search_bar = "true";
        amzn_assoc_tracking_id = "atmarhoreca-20";
        amzn_assoc_search_bar_position = "bottom";
        amzn_assoc_ad_mode = "search";
        amzn_assoc_ad_type = "smart";
        amzn_assoc_marketplace = "amazon";
        amzn_assoc_region = "US";
        amzn_assoc_title = "Shop Related Products";
        amzn_assoc_default_search_phrase = splittedEventData[1];
        amzn_assoc_default_category = "All";
        amzn_assoc_linkid = "d241147a833a91225d67c0372ac8df2d";


        [!] HERE COMES THE SNIPPET IN AMAZON URL. I DIDN'T COPY EVERYTHING HERE IN FORUM BECAUSE AMAZON CODE SNIPPET IS ABOUT 25000 CHARACTERS [!]
    
    }
};     
</script>
  

Итак, теперь на страницах сообщений в блоге есть iFrame, который выполняет поиск на Amazon по названию сообщения в блоге и показывает результат.

Я думаю, мне все еще необходимо иметь более эффективный способ.