抱歉,看漏了。(一般是直接在浏览器的 console 里写,当然写在 script 标签里也是一样的。)
我怀疑可能是引入的问题。
无论是发送端,还是接收端,从前两行看,采用的是直接通过 script 标签引入的方案:
<script src="//cdn.jsdelivr.net/npm/leancloud-storage@3.12.0/dist/av-min.js"></script>
<script src="../../js/realtime.browser.min.js" type="text/javascript" charset="utf-8">
这里的写法有点别扭,看起来 av-min.js 是直接引用了 cdn.jsdelivr.net,而 realtime 是引用了本地文件,不知道这样分别处理有何用意?先不管这个混合使用 cdn 以及本地文件的问题,采用这种引入方案后,只要这样就可以了:
var { Realtime, TextMessage } = AV;
不用使用后面的:
var { Realtime } = require('leancloud-realtime');
var { TextMessage } = require('leancloud-realtime');
这些是供使用 npm 引入依赖的方案使用的。
理论上,如果项目的配置不是特别奇怪(比如同时也以 npm 的方式安装了依赖,并打了包),这句引入应该是不成功的。
浏览器的 console 应该有报错:
ReferenceError: require is not defined
而接收端这里只有这句:
var { Event } = require('leancloud-realtime');
理论上来说,这样是无法正确声明 Event 的。
推荐统一使用一种引入方式,避免多种引入方式导致混乱,以接收端为例:
<script src="//cdn.jsdelivr.net/npm/leancloud-storage@3.12.0/dist/av-min.js"></script>
<script src="//cdn.jsdelivr.net/npm/leancloud-realtime@4.3.0/dist/realtime.browser.min.js"></script>
<script type="text/javascript">
localStorage.setItem('debug', 'leancloud*,LC*');
var { Realtime, TextMessage, Event } = AV;
var realtime = new Realtime({
appId: '应用的 app id',
appKey: '应用的 app key',
});
realtime.createIMClient('Jerry').then(function(jerry) {
jerry.on(Event.MESSAGE, function(message, conversation) {
console.log('Message received: ' + message.text); });
}).catch(console.error);
</script>