我正在通过api在我的商店中添加脚本标签。脚本标记加载正常。在脚本标签中,我添加了以下代码:
Shopify.onItemAdded = function(line_item) {
console.log(line_item.title + ' was added to your shopping cart.');
};
因此,每当有产品添加到购物车时,我都会得到回调。所以我想在这里做一些工作。但是此函数从未调用过。
你们能告诉我我可能做错了吗?
答案 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更新的,则此方法不起作用,因此您需要重新轮询该初始购物车负载。