Javascript Flask SocketIO simple communicator在Chrome和Firefox上运行良好,但在IE上不起作用

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

使用Flask构建的非常简单的通信器在任何地方都可以正常工作,但在Internet Explorer中则不行。在Microcap浏览器上,它返回“405-方法不允许”错误,没有任何附加信息。事件永远不会到达Flask应用程序(没有日志),所以我认为它们被阻塞了。有人面临这个问题吗

整个代码如下所示:

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">&times;</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;"/>&nbsp;
            <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>&nbsp; '+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