Javascript 为什么使用strophe.js的XMPP客户端仍在使用包括flXHR.js在内的文件?

Javascript 为什么使用strophe.js的XMPP客户端仍在使用包括flXHR.js在内的文件?,javascript,flash,xmpp,strophe,Javascript,Flash,Xmpp,Strophe,我使用ejabberd作为XMPP服务器,我们的项目之一需要有一个XMPP web客户端,因此我指的是jake moffitt的专业“使用JavaScript和jQuery进行XMPP编程”,我正在阅读第3章hello world应用程序,在这里,为了使用strophe创建xmpp web客户端,我必须创建java脚本文件,如strophe.js、flXHR.js和strophe.flXHR.js 我已多次查看示例,但未能连接到服务器, 当我使用localhost:5280/httpbind检查

我使用ejabberd作为XMPP服务器,我们的项目之一需要有一个XMPP web客户端,因此我指的是jake moffitt的专业“使用JavaScript和jQuery进行XMPP编程”,我正在阅读第3章hello world应用程序,在这里,为了使用strophe创建xmpp web客户端,我必须创建java脚本文件,如strophe.js、flXHR.js和strophe.flXHR.js

我已多次查看示例,但未能连接到服务器, 当我使用localhost:5280/httpbind检查bosh连接时,它工作正常

当我尝试通过删除flXHR.js连接xmpp服务器时,它神奇地连接到了xmpp服务器

js用于根据“Flash有严格的安全策略,但与JavaScript不同,它允许跨域调用” 要发送到允许此类请求的域的请求。”

如果我绕过上面的FLxhr.js,我必须使用代理

我使用ApacheTomcat作为web应用服务器,我没有设置任何代理,也没有在我的html页面中包含FLxhr.js文件,但xmpp客户端仍然能够与服务器通信

有人能解释一下这背后的原因吗


提前谢谢

您的XMPP服务器很可能启用了CORS,我知道Openfire现在支持这一点。有了CORS,strophe.js可以在不需要flash(FLxhr.js)提供的变通方法的情况下发出跨源请求,也可以在没有任何服务器端重定向的情况下工作

如果您想快速检查XMPP服务器是否启用了CORS,您应该能够找到托管在服务器根目录上的crossdomain.xml文件

例如:

我使用地址
http://192.168.0.26:7070/http-绑定/


由于启用了CORS,我可以浏览到
http://192.168.0.26:7070/crossdomain.xml
,服务器将返回一个XML文件

感谢@fpsColton的回答,我使用的是ejabberd 2.1.11,可能是XMPP服务器启用了CORS,我不确定,但根据书中的java脚本限制,因为它可以在保存它的同一来源上运行,所以需要FLxhr.js来实现可以进行跨域调用的flash,我怀疑现代浏览器是否有能力进行跨域调用??如果其他域正确支持CORS,现代浏览器确实有能力进行跨域调用。这是Jack Moffit关于这个话题的一篇博文,他承认没有听说过这个规范,这就是为什么他的书可能没有提到它的原因。感谢以上评论中的链接,Jake moffitt简要介绍了现代浏览器中的交叉支持,并讨论了ejabbed和punjab bosh经理的paches,nice post!@谢谢你的提醒!!