如何在 Firechat 中创建聊天室
How do I create chat rooms in Firechat?
我正在使用Firechat,并且能够成功启动聊天窗口。我使用的是 Firebase 自定义身份验证,我可以毫无问题地登录。但是,我现在尝试创建一个新的聊天室,然后进入它。根据Firechat文档,我做了以下工作:
<!doctype html>
<html>
<head>
<title>Test</title>
<meta charset="UTF-8" />
<script src='https://cdn.firebase.com/js/client/2.0.2/firebase.js'></script>
<link rel='stylesheet' href='https://cdn.firebase.com/libs/firechat/2.0.1/firechat.min.css' />
<script src='https://cdn.firebase.com/libs/firechat/2.0.1/firechat.min.js'></script>
</head>
<body>
<script type='text/javascript'>
var fireBase = new Firebase("https://XXXXXXXXX.firebaseio.com/");
function initChat(authData) {
var Firechat = new FirechatUI(fireBase, document.getElementById('firechat'));
Firechat.setUser(authData.uid, "Username");
Firechat.createRoom("Test chat room", "public");
}
fireBase.authWithCustomToken("UNIQUE_TOKEN", function(error, authData) {
if (error) {
console.log("Login Failed!", error);
} else {
console.log("Login successful", authData);
initChat(authData);
}
});
</script>
<div id='firechat'>
</div>
</body>
</html>
在javascript控制台中,我可以看到登录成功:
Login successful Object { auth: Object, expires: XXXXXXXXX, token: "XXXXXXXX…", uid: "XXXXXX", provider: "custom" }
但是找不到创建房间函数:
TypeError: Firechat.createRoom is not a function
知道这里出了什么问题吗?
从文档中: Firechat.createRoom(roomName, roomType, callback(roomId))
使用给定名称(字符串(和类型(字符串 - 公共或专用(创建新聊天室,并在完成后使用聊天室 ID 调用回调。
您似乎没有回调。
Firechat.prototype.createRoom = function(roomName, roomType, callback) {
var self = this,
newRoomRef = this._roomRef.push();
var newRoom = {
id: newRoomRef.name(),
name: roomName,
type: roomType || 'public',
createdByUserId: this._userId,
createdAt: Firebase.ServerValue.TIMESTAMP
};
if (roomType === 'private') {
newRoom.authorizedUsers = {};
newRoom.authorizedUsers[this._userId] = true;
}
newRoomRef.set(newRoom, function(error) {
if (!error) {
self.enterRoom(newRoomRef.name());
}
if (callback) {
callback(newRoomRef.name());
}
});
};
来源: https://firechat.firebaseapp.com/docs/firechat.html
因此,事实证明Firechat javascript插件中使用了两个类(这是正确的词(:
var chat = new FirechatUI
var chat = new Firechat
因为它们看起来很相似,我没有注意到差异。在文档中,我无法找到FirechatUI实例的详细信息(尽管在github自述文件中建议使用此代码(。
所以无论如何,问题是new FirechatUI
加载聊天的实际 UI。 new Firechat
加载允许您与聊天插件(但不与 UI(通信的 API。这是一个重要的区别。此处找到的文档仅与 API 相关,因此如果您启动new Firechat
实例。但是,诀窍是启动并运行 UI,然后直接与之交互(执行创建新房间或进入房间等操作(。老实说,我没有找到如何以官方/推荐的方式做到这一点。我唯一能想到的就是一个黑客。这很丑陋,但它有效。下面的代码包括创建新聊天室(使用 Firechat
(和在 UI 中打开特定聊天室的功能(该位被黑客入侵,因为我找不到直接与 UI 交互的方法(。
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>Title</title>
<!-- jQuery -->
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script>
<!-- Firebase -->
<script src='https://cdn.firebase.com/js/client/2.1.0/firebase.js'></script>
<!-- Firechat -->
<link rel='stylesheet' href='https://cdn.firebase.com/libs/firechat/2.0.1/firechat.min.css' />
<script src='https://cdn.firebase.com/libs/firechat/2.0.1/firechat.min.js'></script>
<!-- This plugin here: https://gist.github.com/buu700/4200601 -->
<script type="text/javascript" src="js/arrive.js"></script>
<style type="text/css">
#firechat{width:400px}
</style>
</head>
<body>
<h1>Test</h1>
<script type='text/javascript'>
var fireBase = new Firebase("https://XXXXXX.firebaseio.com/");
function roomChatSetup(authData) {
var chat = new Firechat(fireBase);
chat.setUser(authData.uid, "My User Name", function(user) {
console.log("Creating chatroom...");
chat.createRoom("New Chatroom Name", "public", function(roomId) {
console.log("Created room "+roomId);
});
$("#firechat").html("<div class='alert alert-success'>Your chatroom has been set up. Refresh to view</div>");
});
}
function initChat(authData) {
var chatUI = new FirechatUI(fireBase, document.getElementById('firechat'));
chatUI.setUser(authData.uid, "My User Name");
console.log("Simulating clicks...");
$("#firechat-tab-content div.tab-pane").waitUntilExists(function(){
console.log("Close all other tabs by simulating clicking the X button");
$("#firechat-tab-content div.tab-pane:not(#XXXXXXXXX) a.close").click(); // XXXXX should have the chatroom name of the one you want to open
});
$("#firechat-btn-rooms").waitUntilExists(function(){
$("#firechat-btn-rooms").click();
console.log("Open submenu to load all possible rooms");
});
$("li[data-room-id='XXXXXXXXXXXXX']").waitUntilExists(function(){
$("li[data-room-id='XXXXXXXXXX'] a").click();
console.log("Simulating clicking on chatroom XXXXXXXXXXXXXX");
});
}
fireBase.authWithCustomToken("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", function(error, authData) {
if (error) {
console.log("Login Failed!", error);
} else {
console.log("Login successful", authData);
// Here you can use a programming language to decide. If you already have a
// chatroom, run initChat. If you don't, run createRoom. I haven't been
// able to run them both at the same time.
initChat(authData);
// or:
roomChatSetup(authData);
}
});
</script>
<div id="firechat"></div>
</body>
</html>
FirechatUI 对象与 Firechat 对象是分开的。FirechatUI没有与Firechat相同的方法。
为了从FirechatUI对象获取关联的Firechat对象,您可以执行以下操作:
let chatUI = new FirechatUI(chatRef, document.getElementById("firechat-wrapper"));
let chat = chatUI._chat;
然后,您可以毫无问题地执行任何正常的Firechat操作。
chat.setUser(user.uid, firstName, function(user) {
chat.resumeSession();
});
请记住,_chat元素实际上不应该被使用(正如你从命名约定中可以看出的那样(,但由于FirechatUI没有正确公开足够的功能,这可能是最干净的方法。
- 滚动条在聊天室中不起作用
- 如何使用socket IO检查有多少参与者连接到我的聊天室
- 向聊天室发送消息 socket.io 节点.js
- 从特定行加载聊天室.html文档
- 如何为动态聊天室配置高速公路(crossbar.io)
- 聊天室的可靠计时器
- 即时消息,聊天室 - 用于 LAMP
- 如何设置离线环境来测试我的 Google App Engine 聊天室
- 如何在 Firechat 中创建聊天室
- 使用JavaScript和PHP创建聊天机器人
- 用JavaScript创建聊天框
- 在创建jquery+PHP+MySQL聊天室时遇到问题
- 使用php在XMPP上创建聊天应用程序
- 如何完成滚动聊天室的制作
- 如何加快jquery/php/ajax聊天室的速度
- 用于聊天室的AJAX, jQuery, javascript
- 节点聊天室,存储消息在数组或只是redis
- 我用插座做了一个简单的聊天室.如何防止XSS攻击?
- 使用Memcache构建PHP/Javascript聊天室
- 隐藏聊天室脚本,直到单击按钮