Тема, в которую загружен ваш скрипт, может не использовать 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.');
}
}
};
})()
Другой способ обработки обновлений корзины - это немного усилий.
Вашему приложению требуется прокси-сервер приложения, клиент веб-сокетов и веб-крюк для обновления карты.
Прокси-сервер приложения предоставляет тот же канал хоста для клиента websocket.
Когда страница загружается, вы проверяете наличие корзины. Если у вас есть корзина, вы открываете соединение через веб-сокет и регистрируете маркер корзины.
Если приложение получает обновление корзины, соответствующее вашему токену, оно отправляет корзину вашему прослушивателю веб-сокетов.
Это не работает, если ваша корзина обновляется через ajax, но не через API ajax-cart, поэтому вы вернулись к опросу об этой начальной загрузке корзины.