mirror of
https://github.com/openseadragon/openseadragon.git
synced 2025-02-16 14:53:14 +03:00
Merge pull request #208 from acdha/ie8-ajax-error-handler-fix
Fix AJAX error reporting on IE8
This commit is contained in:
commit
b2ecdcdc2a
@ -1345,7 +1345,25 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
|
|||||||
request.open( "GET", url, true );
|
request.open( "GET", url, true );
|
||||||
request.send( null );
|
request.send( null );
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
$.console.log( "%s while making AJAX request: %s", e.name, e.message );
|
var msg = e.message;
|
||||||
|
|
||||||
|
/*
|
||||||
|
IE < 10 does not support CORS and an XHR request to a different origin will fail as soon
|
||||||
|
as send() is called. This is particularly easy to miss during development and appear in
|
||||||
|
production if you use a CDN or domain sharding and the security policy is likely to break
|
||||||
|
exception handlers since any attempt to access a property of the request object will
|
||||||
|
raise an access denied TypeError inside the catch block.
|
||||||
|
|
||||||
|
To be friendlier, we'll check for this specific error and add a documentation pointer
|
||||||
|
to point developers in the right direction. We test the exception number because IE's
|
||||||
|
error messages are localized.
|
||||||
|
*/
|
||||||
|
var oldIE = $.Browser.vendor == $.BROWSERS.IE && $.Browser.version < 10;
|
||||||
|
if ( oldIE && typeof( e.number ) != "undefined" && e.number == -2147024891 ) {
|
||||||
|
msg += "\nSee http://msdn.microsoft.com/en-us/library/ms537505(v=vs.85).aspx#xdomain";
|
||||||
|
}
|
||||||
|
|
||||||
|
$.console.log( "%s while making AJAX request: %s", e.name, msg );
|
||||||
|
|
||||||
request.onreadystatechange = function(){};
|
request.onreadystatechange = function(){};
|
||||||
|
|
||||||
|
@ -330,9 +330,29 @@ $.TileSource.prototype = {
|
|||||||
$.makeAjaxRequest( url, function( xhr ) {
|
$.makeAjaxRequest( url, function( xhr ) {
|
||||||
var data = processResponse( xhr );
|
var data = processResponse( xhr );
|
||||||
callback( data );
|
callback( data );
|
||||||
}, function ( xhr ) {
|
}, function ( xhr, exc ) {
|
||||||
|
var msg;
|
||||||
|
|
||||||
|
/*
|
||||||
|
IE < 10 will block XHR requests to different origins. Any property access on the request
|
||||||
|
object will raise an exception which we'll attempt to handle by formatting the original
|
||||||
|
exception rather than the second one raised when we try to access xhr.status
|
||||||
|
*/
|
||||||
|
try {
|
||||||
|
msg = "HTTP " + xhr.status + " attempting to load TileSource";
|
||||||
|
} catch ( e ) {
|
||||||
|
var formattedExc;
|
||||||
|
if ( typeof( exc ) == "undefined" || !exc.toString ) {
|
||||||
|
formattedExc = "Unknown error";
|
||||||
|
} else {
|
||||||
|
formattedExc = exc.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
msg = formattedExc + " attempting to load TileSource";
|
||||||
|
}
|
||||||
|
|
||||||
_this.raiseEvent( 'open-failed', {
|
_this.raiseEvent( 'open-failed', {
|
||||||
message: "HTTP " + xhr.status + " attempting to load TileSource",
|
message: msg,
|
||||||
source: url
|
source: url
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user