Skip to content

Instantly share code, notes, and snippets.

@iadvize
Created January 6, 2011 11:15
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save iadvize/767777 to your computer and use it in GitHub Desktop.
Save iadvize/767777 to your computer and use it in GitHub Desktop.
A Strophe plugin by iAdvize that use the XdomainRequest if found (Internet Explorer)
Strophe.addConnectionPlugin("xdomainrequest", {
init: function () {
if (window.XDomainRequest) {
Strophe.debug("using XdomainRequest for IE");
// override thee send method to fire readystate 2
XDomainRequest.prototype.oldsend = XDomainRequest.prototype.send;
XDomainRequest.prototype.send = function() {
XDomainRequest.prototype.oldsend.apply(this, arguments);
this.readyState = 2;
try {
this.onreadystatechange();
} catch (e) {}
};
// replace Strophe.Request._newXHR with the xdomainrequest version
Strophe.Request.prototype._newXHR = function () {
var fireReadyStateChange = function (xhr, status) {
xhr.status = status;
xhr.readyState = 4;
try {
xhr.onreadystatechange();
} catch (e) {}
};
var xhr = new XDomainRequest();
xhr.readyState = 0;
xhr.onreadystatechange = this.func.prependArg(this);
xhr.onload = function () {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(xhr.responseText);
xhr.responseXML = xmlDoc;
fireReadyStateChange(xhr, 200);
};
xhr.onerror = function () {
fireReadyStateChange(xhr, 500);
};
xhr.ontimeout = function () {
fireReadyStateChange(xhr, 500);
};
return xhr;
}
} else {
Strophe.error("XDomainRequest not found. Falling back to native XHR implementation.");
}
}
});
@vonrocco
Copy link

prependArg is deprecated and not supported in IE.

So, replace line 28:
xhr.onreadystatechange = this.func.prependArg(this);
with:
xhr.onreadystatechange = this.func.bind(null,this);

to get it works in IE.

Resources:
http://groups.google.com/group/strophe/browse_thread/thread/4e41294102b7ecf3
metajack/strophejs-plugins#49

@RahulGupta1986
Copy link

Could anyone please let me know how to use strophe plugin,.....I am new to conversejs..

When I am doing prebind true and IE is 8 then only i am not able to connect XMPP server and getting below error...

Kindly help me on this...Thanks in advance!

2014.04.04 16:06:36 org.jivesoftware.openfire.net.SASLAuthentication - SASLAuthentication: SaslException
javax.security.sasl.SaslException: DIGEST-MD5: digest response format violation. Mismatched response.
at com.sun.security.sasl.digest.DigestMD5Server.validateClientResponse(Unknown Source)
at com.sun.security.sasl.digest.DigestMD5Server.evaluateResponse(Unknown Source)
at org.jivesoftware.openfire.net.SASLAuthentication.handle(SASLAuthentication.java:325)
at org.jivesoftware.openfire.SessionPacketRouter.route(SessionPacketRouter.java:66)
at org.jivesoftware.openfire.http.HttpSession.sendPendingPackets(HttpSession.java:645)
at org.jivesoftware.openfire.http.HttpSessionManager$HttpPacketSender.run(HttpSessionManager.java:419)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

@RahulGupta1986
Copy link

Could anyone please let me know how to use strophe plugin,.....I am new to conversejs..

When I am doing prebind true and IE is 8 then only i am not able to connect XMPP server and getting below error...

Kindly help me on this...Thanks in advance!

2014.04.04 16:06:36 org.jivesoftware.openfire.net.SASLAuthentication - SASLAuthentication: SaslException
javax.security.sasl.SaslException: DIGEST-MD5: digest response format violation. Mismatched response.
at com.sun.security.sasl.digest.DigestMD5Server.validateClientResponse(Unknown Source)
at com.sun.security.sasl.digest.DigestMD5Server.evaluateResponse(Unknown Source)
at org.jivesoftware.openfire.net.SASLAuthentication.handle(SASLAuthentication.java:325)
at org.jivesoftware.openfire.SessionPacketRouter.route(SessionPacketRouter.java:66)
at org.jivesoftware.openfire.http.HttpSession.sendPendingPackets(HttpSession.java:645)
at org.jivesoftware.openfire.http.HttpSessionManager$HttpPacketSender.run(HttpSessionManager.java:419)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment