2015-12-11 2 views
0

Кто-нибудь имел успех в реализации JSZip в рамках своей темы Jive? У меня возникла проблема с созданием объекта JSZip. Вот настройка: У меня есть тема Jive, в которой есть некоторые пользовательские JS-файлы в папке сценария. Файлы JS включены с помощью тегов сценария в шаблоне javascript.soy, как это:JSZip in Jive theme

/*javascript.soy*/ <script src="{themeUrl('/scripts/carousel.js')}"></script> <script src="{themeUrl('/scripts/jszip.min.js')}"></script> <script src="{themeUrl('/scripts/our-theme.js')}"></script>

наш-theme.js пытается создавать новый экземпляр JSZip вроде этого:

var zip = new JSZip();

Браузер выдает сообщение об ошибке (видимое в firebug или консоли разработчика Chrome): «ReferenceError: JSZip не определен». Это странно, потому что я могу просмотреть файл сценария через Firebug или щелкнув «Просмотр источника страницы». Я могу проверить, был ли создан и доступен доступный правильный тег скрипта для jszip.min.js, который имеет определение JSZip.

Я могу вызвать функции в других внешних JS-файлах, поэтому единственное, что я могу думать, это то, что я неправильно создаю этот объект. В документации JSZip:

Для браузера доступны два интересных файла: dist/jszip.js и dist/jszip.min.js (включая только один). Если вы используете загрузчик AMD (например, RequireJS), JSZip зарегистрируется: вам просто нужно поместить файл js в нужное место или настроить загрузчик (см. Здесь RequireJS). Без какого-либо загрузчика JSZip объявит в глобальной области переменную с именем JSZip.

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

Я просматривал сообщество, но не мог видеть кого-либо еще, что используется JSZip с Jive, но я полагаю, что это не больно, чтобы попробовать :)

ответ

0

JSZip использует browserify для создания dist/ файлов с UMD определения. Если код UMD обнаруживает среду AMD (а definefunction с amdattribute существует) или nodejs среды (а moduleobject и exportsobject существует) не подвергнет глобальную переменную JSZip.

В вашем браузере, вы должны проверить, если вы находитесь в этой ситуации (эти проверки происходят из сгенерированного jszip.js файла):

console.log("looks like AMD", "function" == typeof define && define.amd); 
console.log("looks like nodejs", "object" == typeof exports && "undefined" != typeof module); 
+0

UHOH. выглядит как среда AMD. Это мой вывод: выглядит как AMD Object {} выглядит как nodejs false Как я могу отобразить переменную JSZip в этом случае? –

+0

Вы должны сначала проверить, правильно ли зарегистрирован JSZip в приложении AMD env/если вы видите какую-либо ошибку в консоли js. Когда я пытаюсь воспроизвести вашу среду с помощью Requirejs, я получаю «Error: Mismatched anonymous define() module» (что ожидается, определение UMD ожидает, что вызывающий абонент назвал этот модуль). Я бы сказал, что у вас будет то же самое. В этом случае вам нужно загрузить JSZip с загрузчиком AMD: 'require ([" {themeUrl ('/ scripts/jszip.min.js')} "], function (JSZip) {console.log (" JSZip ", JSZip);}); '(или лучше, настроить загрузчик AMD с URL-адресом и запросить только« jszip »). –

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