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();
                        }
                }
        };
}

} );

} );