Shopify脚本标签

时间:2018-07-02 15:33:02

标签: javascript shopify shopify-app

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

将事情添加到购物车的一种方式是通过传统的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-cart api更新的,则此方法不起作用,因此您需要重新轮询该初始购物车负载。