Shopify 脚本标签

Shopify Script Tag

我正在通过 api 在我的商店中添加脚本标签。脚本标签加载正常。在脚本标签中,我添加了这段代码:

Shopify.onItemAdded = function(line_item) {
  console.log(line_item.title + ' was added to your shopping cart.');
};

因此,每当将产品添加到购物车时,我都会收到回调。所以我想在这里做一些工作。但是这个函数从来没有被调用过。

你们能告诉我我可能做错了什么吗?

您的脚本加载到的主题可能没有使用 ajax-购物车。据我所知,没有通用的方法来监控购物车中添加的项目,因为有几种方法可以发生。

将东西添加到购物车的一种方式是通过传统的 POST,所以不会有任何事件,所以如果您要检查购物车,则必须在页面加载时这样做。在这种情况下,您可以在 window.sessionStorage 中缓存购物车客户端并在页面加载时检查它是否有更改。

如果您的脚本安装在使用某种 ajax 添加到购物车或购物车更新的站点中,那么您可以在页面加载时将购物车存储在 sessionStorage 中,然后轮询 cart.js一些合理的基础并将其与保存的购物车进行比较。这可能对移动用户非常不友好,但我在人们的帐户中看到更糟糕的情况。

如果正在使用 ajax-cart,那么您的脚本将破坏与它的其他集成。因为它不是真正的事件库,所以您需要做的是:

(function(){
    var defaultAction = Shopify.onItemAdded;
    Shopify.onItemAdded = function(line_item){
        if(defaultAction){
            try{
                defaultAction.apply(Shopify, arguments);
            }finally{
                //your override
                console.log(line_item.title + ' was added to your shopping cart.');
            }
        }
    };
})()

处理购物车更新的另一种方法会比较费力。

您的应用需要一个应用程序代理、一个 websockets 客户端和一个卡片更新 webhook。 应用程序代理为 websocket 客户端提供相同的主机通道。

当页面加载时,您检查购物车。如果你有购物车,你打开一个 websocket 连接并注册购物车令牌。

如果应用程序收到与您的令牌匹配的购物车更新,它会将购物车发送到您的 websocket 侦听器。

如果您的购物车是通过 ajax 而不是通过 ajax-购物车 api 更新的,那么这将不起作用,因此您将返回到轮询初始购物车负载。