如何使用 Wix Corvid 动态更改亚马逊搜索广告的搜索词组?

How to Dynamically Change Amazon Search Ads' Search Phrase with Wix Corvid?

我想在博客页面上有一个亚马逊搜索广告小部件。

当我直接在“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 中,我获取博客 post 标题并将其发送到 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”变量设置为 post 的标题以显示与博客相关的搜索结果。

我不太擅长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>

我希望这是清楚的。任何帮助将不胜感激。

谢谢。

经过多次尝试,我找到了一个解决方案。

我了解到当页面加载时,await $w('#post1').getPost(); 加载速度比 $w("#html2").postMessage(searchCommand); 慢。

所以我决定给页面一些时间来了解它的标题。

1秒不够,2秒足够了。我等了 2 秒,然后将 post 标题发送到 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 部分。亚马逊生成的代码中有2个标签,一个是text/javascript,另一个是src。当我为第一个标签中的变量赋值时,第二个标签在分配新变量之前使用该变量。

所以我去了 URL,它写在 中,我复制了那里的所有内容(大约 25k 个字符)并在分配变量后粘贴到第一个标签中。

<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>

现在,在博客 post 页面中,有一个 iFrame 在亚马逊上搜索博客 post 的标题并显示结果。

我觉得我还是有必要有一个更高效的方法。