diff options
Diffstat (limited to 'src/core.js')
-rw-r--r-- | src/core.js | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/core.js b/src/core.js index cae3a90e3..e37627459 100644 --- a/src/core.js +++ b/src/core.js @@ -515,10 +515,25 @@ jQuery.extend({ noop: function() {}, // Evaluates a script in a global context - globalEval: function( data ) { - var indirect = eval; - if ( jQuery.trim( data ) ) { - indirect( data + ";" ); + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ) + ";"; + + if ( code ) { + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf("use strict") === 1 ) { + script = document.createElement("script"); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + indirect( code ); + } } }, |