Uncaught exception: ReferenceError: Security violation
Error thrown at line 2554, column 16 in <anonymous function: _processRequest>() in http://chat.aviportal.com/strophejs/strophe.js:
req.xhr.send(req.data);
called from line 2566, column 16 in <anonymous function: _processRequest>(i) in http://chat.aviportal.com/strophejs/strophe.js:
sendFunc();
called from line 2607, column 12 in <anonymous function: _throttledRequestHandler>() in http://chat.aviportal.com/strophejs/strophe.js:
this._processRequest(0);
called from line 2709, column 16 in <anonymous function: _onRequestStateChange>(func, req) in http://chat.aviportal.com/strophejs/strophe.js:
this._throttledRequestHandler();
如果有人有类似的问题,请告诉我,或者,我会听你的意见。 先谢谢Alex,
编辑: 好的,首先,感谢您的回复!
$(document).ready(function() {
var conn = new Strophe.Connection(
'http://chat.aviportal.com:5280/xmpp-httpbind');
conn.connect('guest2@chat.aviportal.com', 'passwd', function (status) {
if (status === Strophe.Status.CONNECTED) {
$(document).trigger('connected');
} else if (status === Strophe.Status.DISCONNECTED) {
$(document).trigger('disconnected');
}
});
这是我初始化strophe连接的方法,这个过程在conn.connect('gest2 @ chat.aviportal.com'等)上爆炸 在该行上抛出异常。 BTW,什么是CORS,跨域请求? ejabberd在与php文件相同的子域中,所以我不认为,但是,它有一个小的可能性,它是^ _ ^
答案 0 :(得分:1)
尽管您的网络服务器与ejabberd在同一个域上运行,但访问不同的端口会构成跨域请求,并应引发安全性异常。因此,与domain:5280
的关联与domain:80
不同。
要轻松解决此问题,您应该在设置中包含代理。很可能你已经拥有apache或nginx,所以你应该代理domain:80/http-bind
转到domain:5280
。例如,对于nginx,你应该有类似的东西:
location /http-bind {
proxy_buffering off;
tcp_nodelay on;
keepalive_timeout 55;
proxy_pass http://localhost:5280;
}
在你的nginx.conf中。
答案 1 :(得分:1)
你可以在没有Jquery的情况下解决这个问题!
在您从中获取数据的文件的标题中添加以下内容:
Access-Control-Allow-Origin: *
答案 2 :(得分:0)
如果您使用的库是基于jQuery的,请尝试将其放在您的文件中:
jQuery.support.cors = true;
此错误是由Opera阻止跨站点请求引起的。如果服务器端脚本允许, CORS 将允许从普通网页发出跨站点请求。阅读更多here。
目前,只要您在 config.xml 文件中specify it,Opera就只允许扩展内的跨站点请求。但即便如此,如果您尝试在扩展中使用jQuery来发出XSS请求,除非您在文件中包含我在开头提到的行,否则您将获得安全违规。