Javascript Flask SocketIO simple communicator在Chrome和Firefox上运行良好,但在IE上不起作用
使用Flask构建的非常简单的通信器在任何地方都可以正常工作,但在Internet Explorer中则不行。在Microcap浏览器上,它返回“405-方法不允许”错误,没有任何附加信息。事件永远不会到达Flask应用程序(没有日志),所以我认为它们被阻塞了。有人面临这个问题吗 整个代码如下所示:Javascript Flask SocketIO simple communicator在Chrome和Firefox上运行良好,但在IE上不起作用,javascript,python,flask,flask-socketio,Javascript,Python,Flask,Flask Socketio,使用Flask构建的非常简单的通信器在任何地方都可以正常工作,但在Internet Explorer中则不行。在Microcap浏览器上,它返回“405-方法不允许”错误,没有任何附加信息。事件永远不会到达Flask应用程序(没有日志),所以我认为它们被阻塞了。有人面临这个问题吗 整个代码如下所示: app = Flask(__name__) app.config['SECRET_KEY'] = 'very_secret_word_to_enable_encrytion#' # eventlet
app = Flask(__name__)
app.config['SECRET_KEY'] = 'very_secret_word_to_enable_encrytion#'
# eventlet.monkey_patch()
socketio = SocketIO(app)
@app.route('/')
def sessions():
return render_template('session.html')
def messageReceived(methods=['GET', 'POST']):
print('message was received!!!')
@socketio.on('chat event')
def handle_event(json, methods=['GET', 'POST']):
print('received chat event: ' + str(json))
socketio.emit('chat response', json, callback=messageReceived)
if __name__ == '__main__':
socketio.run(app, debug=True, host='0.0.0.0')
以及相应的session.html页面正文:
<div id="main" class="container-fluid mx-auto">
<div class="alert welcome-alert alert-primary alert-dismissible fade show" role="alert" style="width: 750px;">
<p><strong>Snicky serverless communicator</strong> for internal network chats out of the public<br/>
It doesn't save anything, everything you write here will be lost after closing browser session
</p>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div id="second-alert"></div>
<form action="" method="POST" style="margin-top: 20px;">
<div style="display:inline-block;">
<input type="text" class="username" placeholder="Your name" style="width: 120px;"/>
<input type="text" class="message" placeholder="Your messages then enter or click" style="width: 400px;"/>
<!--<textarea rows="5" class="message" placeholder="Messages"></textarea>-->
<input type="submit" class="btn btn-outline-primary"/>
</div>
</form>
<br/>
<h3 style='color: #ccc;font-size: 30px;'>No message yet..</h3>
<div class="message_holder"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
<script type="text/javascript">
function check_if_msie() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
if (msie > 0) { // If Internet Explorer, return version number
console.log(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
return true;
}
else { // If another browser, return 0
console.log('otherbrowser');
return false;
}
}
if (check_if_msie())
socket = io.connect(location.protocol + "//" + location.host + + ':' + location.port);
else
socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on( 'connect', function() {
socket.emit( 'chat event', {
data: 'User Connected'
})
var form = $( 'form' ).on( 'submit', function( e ) {
e.preventDefault();
let user_name = $( 'input.username' ).val();
let user_input = $( 'input.message' ).val();
socket.emit( 'chat event', {
user_name : user_name,
message : user_input
})
$( 'input.message' ).val( '' ).focus();
})
})
socket.on( 'chat response', function( msg ) {
console.log( msg )
if( typeof msg.user_name !== 'undefined' ) {
$( 'h3' ).remove()
$( 'div.message_holder' ).append( '<div><b style="color: #000">'+msg.user_name+':</b> '+msg.message+'</div>' )
}
})
</script>
<script>
$('document').ready(function() {
setTimeout(function() {
alerts = $(".welcome-alert");
if (alerts) alerts.hide();
$('<span class="badge badge-info">Communicator does not support Internet Explorer yet' +
' and it is hard to say if it ever will</span>').show().appendTo('#second-alert');
}, 6400); // <-- time in milliseconds -->
});
</script>
</div>
</body>
以下是IE的相同内容:
(12176) accepted ('10.2.16.95', 58750)
10.2.16.95 - - [20/Jun/2019 08:07:44] "GET / HTTP/1.1" 200 4713 0.002000
10.2.16.95 - - [20/Jun/2019 08:07:55] "POST / HTTP/1.1" 405 347 0.001000
因此IE正在连接,但无法发送消息
什么URL和什么请求方法给了你IE上的405错误。还有,你在两个函数上添加的
方法=['GET','POST']
是什么?我用结果表单2浏览器更新了我的帖子,以便给你更好的图片。也不用担心方法,反正它们不在使用中,我只是想控制一些事情:发生了什么以及如何发生的,但这最终是未来的声音。IE没有连接到socket.io。不知道是谁在发送POST请求,但我不认为是Socket.IO客户端在发送POST请求,因为URL应该是/Socket.IO
,正如您在Chrome中看到的那样。查看IE JavaScript控制台中是否有任何错误消息。当我将浏览器连接到应用程序时,会出现前2行,因此这只是对主页的请求。第三个条目出现在我尝试发送消息时,如果该消息不存在,它首先尝试连接到套接字。所有3行都是IE制作的,我想Microcap浏览器在连接到我的应用程序用405关闭的插座时试图做一些意想不到的事情。IE javascript控制台只显示其自己生成的错误页面警告(附图片),网络选项卡不显示任何内容。
(12176) accepted ('10.2.16.95', 58750)
10.2.16.95 - - [20/Jun/2019 08:07:44] "GET / HTTP/1.1" 200 4713 0.002000
10.2.16.95 - - [20/Jun/2019 08:07:55] "POST / HTTP/1.1" 405 347 0.001000