p2p.wrox.com Forums

p2p.wrox.com Forums (http://p2p.wrox.com/index.php)
-   BOOK: Professional XMPP Programming with JavaScript and jQuery (http://p2p.wrox.com/forumdisplay.php?f=542)
-   -   Not all browsers successfully establish a connection (http://p2p.wrox.com/showthread.php?t=90066)

drayarms May 16th, 2013 11:25 PM

Not all browsers successfully establish a connection
 
I just got started with XMPP, so please bare with me if I don't make much sense. I built a simple script to connect to the jabber.org server, based on the hello.js example in chapter 3 of the book. I uploaded the entire scripts folder to my server from the code resources, containing the strophe and affiliated libraries. Everything works perfectly in chrome and IE. However, connection can't be established on all other major desktop and mobile(iphone)browsers. i thought the strophe library was cross browser compatible. Anyone else has this issue or knows how to remedy the situation?

I'm going to include the modified hello.html, hello.js and hello.css files below.

hello.html or hello.php
Code:


<!DOCTYPE html>
<html>
  <head>
    <title>Hello - Chapter 3</title>
   
    <script type = "text/javascript" src="http://code.jquery.com/jquery-latest.js"> </script>



    <!--include JQM-->
    <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0-rc.1/jquery.mobile-1.3.0-rc.1.min.css" />
    <script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.3.0-rc.1/jquery.mobile-1.3.0-rc.1.min.js"></script>



    <!--include strophe and flxhr-->

    <script src='scripts/strophe.js'></script>
    <script src='scripts/flXHR.js'></script>
    <script src='scripts/strophe.flxhr.js'></script>



    <link rel='stylesheet' href='hello.css'>

    <script src='hello.js'></script>


  </head>
  <body>
    <h1>Hello</h1>

    <div id='log'>
    </div>

    <!-- login dialog -->
    <div id='login_dialog' class=''>
      <label>JID:</label><input type='text' id='jid'>
      <label>Password:</label><input type='password' id='password'>
      <button>Submit</button>
    </div>
  </body>
</html>


hello.css

Code:


body {
    font-family: Helvetica;
}

h1 {
    text-align: center;
}

.hidden {
    display: none;
}

#log {
    width:300px;height:300px;color:red;border:1px solid black;
}


hello.js

Code:

var Hello = {
    connection: null,
    start_time: null,

    log: function (msg) {
        $('#log').append("<p>" + msg + "</p>");
    },

    send_ping: function (to) {
        var ping = $iq({
            to: to,
            type: "get",
            id: "ping1"}).c("ping", {xmlns: "urn:xmpp:ping"});

        Hello.log("Sending ping to " + to + ".");

        Hello.start_time = (new Date()).getTime();
        Hello.connection.send(ping);
    },

    handle_pong: function (iq) {
        var elapsed = (new Date()).getTime() - Hello.start_time;
        Hello.log("Received pong from server in " + elapsed + "ms.");

        Hello.connection.disconnect();
       
        return false;
    }
};

$(document).ready(function () {

        $('#login_dialog button').click(function(){


                Hello.log("connecting...");

                $(document).trigger('connect', {
                    jid: $('#jid').val(),
                    password: $('#password').val()
                });               

        });

});

$(document).bind('connect', function (ev, data) {
    var conn = new Strophe.Connection(
        "http://bosh.metajack.im:5280/xmpp-httpbind");

    conn.connect(data.jid, data.password, function (status) {
        if (status === Strophe.Status.CONNECTED) {
            $(document).trigger('connected');
        } else if (status === Strophe.Status.DISCONNECTED) {
            $(document).trigger('disconnected');
        }
    });

    Hello.connection = conn;
});

$(document).bind('connected', function () {
    // inform the user
    Hello.log("Connection established.");



    Hello.log("Full jid is: " + Hello.connection.jid + ".");

    Hello.log("Domain is: " + Strophe.getDomainFromJid(Hello.connection.jid) + ".");

    Hello.log("Resource is: " + Strophe.getResourceFromJid(Hello.connection.jid) + ".");

    Hello.log("Bare jid is: " + Strophe.getBareJidFromJid(Hello.connection.jid) + ".");

    Hello.connection.addHandler(Hello.handle_pong, null, "iq", null, "ping1");

    var domain = Strophe.getDomainFromJid(Hello.connection.jid);
   
    Hello.send_ping(domain);

});

$(document).bind('disconnected', function () {
    Hello.log("Connection terminated.");

    // remove dead connection object
    Hello.connection = null;
});


Thanks[:)]

metajack May 16th, 2013 11:49 PM

Mobile browsers don't support Flash. Remove strophe.flxhr.js and you should have better luck.

drayarms May 17th, 2013 12:40 AM

Quote:

Originally Posted by metajack (Post 291372)
Mobile browsers don't support Flash. Remove strophe.flxhr.js and you should have better luck.

Thanks for that tip metajack. Now I can get a connection in all major browsers, mobile and desktop, with the exception on opera. That's a huge improvement.

drayarms May 17th, 2013 01:11 AM

Quote:

Originally Posted by metajack (Post 291372)
Mobile browsers don't support Flash. Remove strophe.flxhr.js and you should have better luck.

Thanks for that tip metajack. Now I can get a connection in all major browsers, mobile and desktop, with the exception on opera. That's a huge improvement.

drayarms May 17th, 2013 01:44 AM

Quote:

Originally Posted by metajack (Post 291372)
Mobile browsers don't support Flash. Remove strophe.flxhr.js and you should have better luck.

Thanks for that tip metajack. Now I can get a connection in all major browsers, mobile and desktop, with the exception on opera. That's a huge improvement.

drayarms May 17th, 2013 10:55 AM

Quote:

Originally Posted by metajack (Post 291372)
Mobile browsers don't support Flash. Remove strophe.flxhr.js and you should have better luck.

After following your advice (removing strophe.flxhr.js), I got the application to establish a connection in most browsers with the exeption of opera. That was last night. This morning after waking up I was back to the original problem, couldn't establish a connection even though I hadn't changed the code. What could be the problem??[:confused:]
I added, the AUTHENTICATIG, CONNECTING, CONNFAIL, and AUTHFAIL, checks and discovered the problem was a connfail. I have just checked jabber's latest notice updates and the service seems to be running okay. Any ideas about what might be causing connfail when it wasn't a problem 10 hours ago?

metajack May 17th, 2013 11:18 AM

Check that the XMPP server is up, that the BOSH manager is up, and that you are not running cross domain somehow this morning.

The URL that services the HTML page of your application must be on the same port and domain as the BOSH endpoint, unless the browser and BOSH manager support CORS (IE does not for example).

This sounds to me like a cross domain access violation.

drayarms May 17th, 2013 11:40 AM

Quote:

Originally Posted by metajack (Post 291389)
Check that the XMPP server is up, that the BOSH manager is up, and that you are not running cross domain somehow this morning.

The URL that services the HTML page of your application must be on the same port and domain as the BOSH endpoint, unless the browser and BOSH manager support CORS (IE does not for example).

This sounds to me like a cross domain access violation.

I think the XMPP server is up(at least it seems that way to me, I checked jabber's latest updates and there seems to be nothing wrong with the service). As for the BOSH manager, I have no clue how to go about checking that. Any links to any good tutorials? And if the BOSH could establish a connection last night but not today, does that mean that the port's value is somehow dynamic and can change on a whim?

metajack May 17th, 2013 11:55 AM

You can just visit the BOSH endpoint in your browser. You should seem some simple message there if it's working.

drayarms May 17th, 2013 12:01 PM

Quote:

Originally Posted by metajack (Post 291391)
You can just visit the BOSH endpoint in your browser. You should seem some simple message there if it's working.

You'd have to forgive me for the silly questions since I'm brand new to XMPP. I'd have to take a deeper look at BOSH. Anyways, all of a sudden, I'm getting a connection again, but I'm still going to look into everything you suggested.


All times are GMT -4. The time now is 10:44 PM.

Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
© 2013 John Wiley & Sons, Inc.