有没有人在他们的Jive主题中实现JSZip有任何成功?我在实例化JSZip对象时遇到问题。这是设置: 我有一个Jive主题,在脚本文件夹中有一些自定义JS文件。 JS文件包含在javascript.soy模板中的脚本标记中,如下所示:
/*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>
our-theme.js试图像这样实例化一个新的JSZip实例:
var zip = new JSZip();
浏览器抛出错误(在firebug或Chrome Developer Console中可见)&#34; ReferenceError:JSZip未定义&#34;。这很奇怪,因为我可以通过Firebug查看脚本文件或点击&#34;查看页面来源&#34;我可以验证jszip.min.js的具有JSZip定义的正确脚本标记是否已生成并且可以访问。
我能够在其他外部JS文件中调用函数,所以我唯一能想到的是我错误地实例化了这个对象。根据JSZip文档:
对于浏览器,有两个有趣的文件:dist / jszip.js和dist / jszip.min.js(仅包括一个)。 如果您使用AMD加载程序(例如RequireJS),JSZip将自行注册:您只需将js文件放在正确的位置,或配置加载程序(请参阅此处的RequireJS)。 如果没有任何加载器,JSZip将在全局范围内声明一个名为JSZip的变量。
我没有使用RequireJS。因此,JSZip应该注册为全局变量,但是我无法访问它并在窗口集合中看到它。
我浏览了整个社区,但是看不到其他人在Jive上使用过JSZip,但我觉得尝试它并没有什么坏处。)
答案 0 :(得分:0)
JSZip使用browserify生成dist/
个定义define
的文件。如果UMD代码检测到AMD环境(存在amd
UMD的module
function)或nodejs环境(exports
attribute并且JSZip
object存在)它不会公开全局jszip.js
变量。
在浏览器中,您应该检查您是否处于这种情况(这些检查来自生成的console.log("looks like AMD", "function" == typeof define && define.amd);
console.log("looks like nodejs", "object" == typeof exports && "undefined" != typeof module);
文件):
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
http.listen(3000, function(){
console.log('Listening on Port 3000');
});
io.on('connection', function(socket) {
socket.on('message', function(data, cb){
socket.to(data.destId).emit('message', {'desc':data.message, 'destId':socket.id,'userProfile':data.userProfile});
cb('success sending message');
});
socket.on('join', function(data, cb){
socket.join(data.user);
cb('success joining');
});
socket.on('bye', function(user){
socket.broadcast.to(user).emit('bye', socket.id);
})
});