| define( [ |
| "../core", |
| "../var/document", |
| "../ajax" |
| ], function( jQuery, document ) { |
| |
| "use strict"; |
| |
| // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) |
| jQuery.ajaxPrefilter( function( s ) { |
| if ( s.crossDomain ) { |
| s.contents.script = false; |
| } |
| } ); |
| |
| // Install script dataType |
| jQuery.ajaxSetup( { |
| accepts: { |
| script: "text/javascript, application/javascript, " + |
| "application/ecmascript, application/x-ecmascript" |
| }, |
| contents: { |
| script: /\b(?:java|ecma)script\b/ |
| }, |
| converters: { |
| "text script": function( text ) { |
| jQuery.globalEval( text ); |
| return text; |
| } |
| } |
| } ); |
| |
| // Handle cache's special case and crossDomain |
| jQuery.ajaxPrefilter( "script", function( s ) { |
| if ( s.cache === undefined ) { |
| s.cache = false; |
| } |
| if ( s.crossDomain ) { |
| s.type = "GET"; |
| } |
| } ); |
| |
| // Bind script tag hack transport |
| jQuery.ajaxTransport( "script", function( s ) { |
| |
| // This transport only deals with cross domain or forced-by-attrs requests |
| if ( s.crossDomain || s.scriptAttrs ) { |
| var script, callback; |
| return { |
| send: function( _, complete ) { |
| script = jQuery( "<script>" ) |
| .attr( s.scriptAttrs || {} ) |
| .prop( { charset: s.scriptCharset, src: s.url } ) |
| .on( "load error", callback = function( evt ) { |
| script.remove(); |
| callback = null; |
| if ( evt ) { |
| complete( evt.type === "error" ? 404 : 200, evt.type ); |
| } |
| } ); |
| |
| // Use native DOM manipulation to avoid our domManip AJAX trickery |
| document.head.appendChild( script[ 0 ] ); |
| }, |
| abort: function() { |
| if ( callback ) { |
| callback(); |
| } |
| } |
| }; |
| } |
| } ); |
| |
| } ); |