JSZip in Jive主题

时间:2015-12-11 00:16:33

标签: javascript jquery jszip soy-templates

有没有人在他们的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,但我觉得尝试它并没有什么坏处。)

1 个答案:

答案 0 :(得分:0)

JSZip使用browserify生成dist/个定义define的文件。如果UMD代码检测到AMD环境(存在amd UMDmodule 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);
        })
    });