建立连接后如何运行 JavaScript编码?
How to run JavaScript code once the connection is established?
作为 Node.js 新手,我正在尝试更改 Nick Anastasov 的 Smartphone Remote Control with Node.js and Socket.io 示例,这样就不需要密码了。
在原始源代码中,app.js 文件在输入单词 kittens 后发送 { access : 'granted' }
进入网络表单,script.js 开始其主要任务,例如取消模糊网页:
socket.on('access', function(data) {
if (data.access === "granted") { // XXX Tried removing this line
blurredElements.removeClass('blurred');
form.hide();
$(window).on('hashchange', function() {
// ....
});
socket.on('navigate', function(data) {
// ....
});
}
});
我已经更改了 app.js,因此它根本不会发出 access
。
然后我尝试只从 script.js 中删除 if (data.access === "granted")
行,但这当然没有用:网页保持模糊,因为不再收到 access
事件(granted
和 denied
)。
我的问题是:我应该如何更改上面的代码,以便在建立连接后它是运行?
我应该使用 socket.on('connect')
还是 socket.on('connection')
还是同样的问题(因为没有发送字符串 connect
)?
更新:
根据 Brad 的建议(谢谢!)我已将 script.js 中的字符串从 "access" 更改为 "connection",但是网页保持模糊 - 这是完整的源代码:
$(function() {
Reveal.initialize({
history: true
});
var socket = io();
var presentation = $('.reveal');
socket.on('connection', function(data){ // XXX changed this
presentation.removeClass('blurred'); // XXX not called
var ignore = false;
$(window).on('hashchange', function(){
if (ignore){
return;
}
var hash = window.location.hash;
socket.emit('slide-changed', {
hash: hash
});
});
socket.on('navigate', function(data){
window.location.hash = data.hash;
ignore = true;
setInterval(function () {
ignore = false;
},100);
});
});
});
这里是完整的app.js源代码:
var express = require('express'),
app = express();
var port = process.env.PORT || 8080;
var io = require('socket.io').listen(app.listen(port));
app.use(express.static(__dirname + '/public'));
var presentation = io.on('connection', function (socket) {
socket.on('slide-changed', function(data){
presentation.emit('navigate', {
hash: data.hash
});
});
});
是的,你想要 io.on('connection')
。只要有新客户端连接,就会触发此事件。
作为 Node.js 新手,我正在尝试更改 Nick Anastasov 的 Smartphone Remote Control with Node.js and Socket.io 示例,这样就不需要密码了。
在原始源代码中,app.js 文件在输入单词 kittens 后发送 { access : 'granted' }
进入网络表单,script.js 开始其主要任务,例如取消模糊网页:
socket.on('access', function(data) {
if (data.access === "granted") { // XXX Tried removing this line
blurredElements.removeClass('blurred');
form.hide();
$(window).on('hashchange', function() {
// ....
});
socket.on('navigate', function(data) {
// ....
});
}
});
我已经更改了 app.js,因此它根本不会发出 access
。
然后我尝试只从 script.js 中删除 if (data.access === "granted")
行,但这当然没有用:网页保持模糊,因为不再收到 access
事件(granted
和 denied
)。
我的问题是:我应该如何更改上面的代码,以便在建立连接后它是运行?
我应该使用 socket.on('connect')
还是 socket.on('connection')
还是同样的问题(因为没有发送字符串 connect
)?
更新:
根据 Brad 的建议(谢谢!)我已将 script.js 中的字符串从 "access" 更改为 "connection",但是网页保持模糊 - 这是完整的源代码:
$(function() {
Reveal.initialize({
history: true
});
var socket = io();
var presentation = $('.reveal');
socket.on('connection', function(data){ // XXX changed this
presentation.removeClass('blurred'); // XXX not called
var ignore = false;
$(window).on('hashchange', function(){
if (ignore){
return;
}
var hash = window.location.hash;
socket.emit('slide-changed', {
hash: hash
});
});
socket.on('navigate', function(data){
window.location.hash = data.hash;
ignore = true;
setInterval(function () {
ignore = false;
},100);
});
});
});
这里是完整的app.js源代码:
var express = require('express'),
app = express();
var port = process.env.PORT || 8080;
var io = require('socket.io').listen(app.listen(port));
app.use(express.static(__dirname + '/public'));
var presentation = io.on('connection', function (socket) {
socket.on('slide-changed', function(data){
presentation.emit('navigate', {
hash: data.hash
});
});
});
是的,你想要 io.on('connection')
。只要有新客户端连接,就会触发此事件。