xmpp Opera抛出安全错误

时间:2012-03-02 17:57:25

标签: security xmpp opera

编程大师! 我根据“XMPP编程”一书创建了一些聊天,所以我在项目中包含了strophe.js和gab.js。一切都很好,服务在IE和Firefox中都有效。但不是Opera,Opera在这种情况下抛出异常

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文件相同的子域中,所以我不认为,但是,它有一个小的可能性,它是^ _ ^

3 个答案:

答案 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请求,除非您在文件中包含我在开头提到的行,否则您将获得安全违规。