2015-08-26 5 views
0

Прямо сейчас у меня есть магазин, настроенный на Shopify, и Im, используя приложение, которое устанавливается в нашем магазине. Это приложение вызывает сценарий так:Предотвращение загрузки JS с помощью JS

if(!add_to_order_tag) 
$('.product_rp_div.p{{ product.id }}').append('<script async class="add_to_order" src="https://ro.boldapps.net/recurring_settings/add_to_order?&shop_url={{ shop.permanent_domain }}&group_id='+group_id+'&customer_id={{ customer.id }}&product_id='+prodId+'&variant_id='+myVariant+'"></'+''+'script>'); 

Этот сценарий содержит вызов bootstrap.modal.min.js, функцию, которая уже загружена на моем магазин через нормальный bootstrap.min.js и это дает мне неприятность вызывает все мои модальности открываются и закрывается очень быстро , поскольку этот скрипт имеет важные функции для работы приложения, но он только повторяет загрузку скрипта, который у меня уже есть, мне было интересно, есть ли способ предотвратить загрузку второго boostrap.modal.min.js с помощью JS? Или если была хорошая работа, чтобы предотвратить модальное закрытие.

Вот моя версия бутстрапе называют:

//cdn.shopify.com/s/files/1/0154/0015/t/12/assets/bootstrap.min.css?7437598206705920800 

А вот их версия модели бутстраповской называют:

https://ro.boldapps.net/app_assets/js/bootstrap-modal.min.js 

Заранее спасибо за помощь: D

+0

Загружается ли другая версия этого же кода, что вызывает эту проблему? Сколько у вас контроля над загрузкой приложения? Не могли бы вы поместить вокруг него какой-то код? – glenatron

+0

Код, который находится сверху, вызывает JS на серверах приложений. Поэтому я не могу коснуться этого кода. Тем не менее я могу добавить js до этого вызова, чтобы предотвратить загрузку этого конкретного js, если это возможно. И загрузка этого кода вызывает проблему, потому что загрузочные модальные функции загружаются дважды. Если я выберу эту конкретную строку, модалы будут работать отлично. –

ответ

0

Одним из способов избежать этого довольно утомительного поведения, которое иногда случается с сторонними приложениями, библиотеками или надстройками, является просто переназначение соответствующего модуля, в то время как библиотекарь y загружается, а затем помещается обратно. Это не красиво, но часто работает:

var bootstrap-temp = Bootstrap.Modal; 
loadIrritatingLibrary(); 
Bootstrap.Modal = bootstrap-temp; 

Это будет по крайней мере, положить его обратно в нужном состоянии в конце разговора.

К сожалению Bootstrap связей себя в jQuery модуль, так что это труднее отделить - фактическая модальная функция JQuery хранится в jQuery.fn.modal но, учитывая, что большая часть модуля скрыта, возможно, потребуется загрузить в Bootstrap после другого сценария загружается в.

Обе из них работают, потому что версия кода, которую видит JavaScript, является последней загруженной версией, поэтому, если вы будете назначать одну и ту же переменную повторно, она будет помнить последнюю и что функции могут быть обработаны как переменные так же, как объекты.

Лучшим решением, где это возможно, является использование загрузчика модуля, такого как RequireJS, который должен гарантировать, что все загружается только один раз, но это не всегда доступно в подобной ситуации.

Это также зависит от проблемы, заключающейся в том, что версия Модаля перезагружается, а не что-то в этом скрипте, влияющее на способ создания модалов, что также может быть проблемой из вашего описания. Должно быть возможно проверить версию, загружаемую приложением, чтобы подтвердить, связана ли с этим проблема.

+0

Bootstrap.Modal - это объект или что это? –

+0

Отредактировано немного больше объяснений. К сожалению, с плагинами jQuery это немного сложнее сделать ... – glenatron

Смежные вопросы