Commit 220a0ce1 authored by Brandon Sterne's avatar Brandon Sterne Committed by jeresig

Defer scriptEval test until first use to prevent Content Security Policy...

Defer scriptEval test until first use to prevent Content Security Policy inline-script violations from occuring. Fixes #7371.
parent f01ef93a
...@@ -583,7 +583,7 @@ jQuery.extend({ ...@@ -583,7 +583,7 @@ jQuery.extend({
script.type = "text/javascript"; script.type = "text/javascript";
if ( jQuery.support.scriptEval ) { if ( jQuery.support.scriptEval() ) {
script.appendChild( document.createTextNode( data ) ); script.appendChild( document.createTextNode( data ) );
} else { } else {
script.text = data; script.text = data;
......
...@@ -4,10 +4,7 @@ ...@@ -4,10 +4,7 @@
jQuery.support = {}; jQuery.support = {};
var root = document.documentElement, var div = document.createElement("div");
script = document.createElement("script"),
div = document.createElement("div"),
id = "script" + jQuery.now();
div.style.display = "none"; div.style.display = "none";
div.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>"; div.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
...@@ -64,7 +61,7 @@ ...@@ -64,7 +61,7 @@
deleteExpando: true, deleteExpando: true,
optDisabled: false, optDisabled: false,
checkClone: false, checkClone: false,
scriptEval: false, _scriptEval: null,
noCloneEvent: true, noCloneEvent: true,
boxModel: null, boxModel: null,
inlineBlockNeedsLayout: false, inlineBlockNeedsLayout: false,
...@@ -77,32 +74,45 @@ ...@@ -77,32 +74,45 @@
select.disabled = true; select.disabled = true;
jQuery.support.optDisabled = !opt.disabled; jQuery.support.optDisabled = !opt.disabled;
script.type = "text/javascript"; jQuery.support.scriptEval = function() {
try { if ( jQuery.support._scriptEval === null) {
script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); var root = document.documentElement,
} catch(e) {} script = document.createElement("script"),
id = "script" + jQuery.now();
root.insertBefore( script, root.firstChild );
script.type = "text/javascript";
// Make sure that the execution of code works by injecting a script try {
// tag with appendChild/createTextNode script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
// (IE doesn't support this, fails, and uses .text instead) } catch(e) {}
if ( window[ id ] ) {
jQuery.support.scriptEval = true; root.insertBefore( script, root.firstChild );
delete window[ id ];
} // Make sure that the execution of code works by injecting a script
// tag with appendChild/createTextNode
// (IE doesn't support this, fails, and uses .text instead)
if ( window[ id ] ) {
jQuery.support._scriptEval = true;
delete window[ id ];
} else {
jQuery.support._scriptEval = false;
}
root.removeChild( script );
// release memory in IE
root = script = id = null;
}
return jQuery.support._scriptEval;
};
// Test to see if it's possible to delete an expando from an element // Test to see if it's possible to delete an expando from an element
// Fails in Internet Explorer // Fails in Internet Explorer
try { try {
delete script.test; delete div.test;
} catch(e) { } catch(e) {
jQuery.support.deleteExpando = false; jQuery.support.deleteExpando = false;
} }
root.removeChild( script );
if ( div.attachEvent && div.fireEvent ) { if ( div.attachEvent && div.fireEvent ) {
div.attachEvent("onclick", function click() { div.attachEvent("onclick", function click() {
// Cloning a node shouldn't copy over any // Cloning a node shouldn't copy over any
...@@ -191,6 +201,6 @@ ...@@ -191,6 +201,6 @@
jQuery.support.changeBubbles = eventSupported("change"); jQuery.support.changeBubbles = eventSupported("change");
// release memory in IE // release memory in IE
root = script = div = all = a = null; div = all = a = null;
})(); })();
})( jQuery ); })( jQuery );
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment