Animal
24 Nov 2006, 2:10 PM
Turned out the regex still wasn't there. It was greedy in matching the ([\'\"]) pattern, and in the string <script src="foo" type="text/javascript"></script> if would extract the source as 'foo" type="text/javascript"'
Also, on the else side of the srcMatch, match[1] is always true for valid script tags - it's a string, but zero length, so I added a length check:
YAHOO.util.Event.onAvailable(id, function(){
var hd = document.getElementsByTagName("head")[0];
var re = /(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/img;
var srcRe = /\ssrc=[\'\"]([^\'\"]*)[\'\"]/i; // <------ this changed
var match;
while(match = re.exec(html)){
var srcMatch = match[0].match(srcRe);
if(srcMatch && srcMatch[1]){
var s0 = document.createElement("script");
s0.src = srcMatch[1];
hd.appendChild(s0);
}else if(match[1] && (match[1].length != 0)){ //<----- this changed too
eval(match[1]);
}
}
var el = document.getElementById(id);
if(el){el.parentNode.removeChild(el);}
if(typeof callback == 'function'){
callback();
}
});
Also, on the else side of the srcMatch, match[1] is always true for valid script tags - it's a string, but zero length, so I added a length check:
YAHOO.util.Event.onAvailable(id, function(){
var hd = document.getElementsByTagName("head")[0];
var re = /(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/img;
var srcRe = /\ssrc=[\'\"]([^\'\"]*)[\'\"]/i; // <------ this changed
var match;
while(match = re.exec(html)){
var srcMatch = match[0].match(srcRe);
if(srcMatch && srcMatch[1]){
var s0 = document.createElement("script");
s0.src = srcMatch[1];
hd.appendChild(s0);
}else if(match[1] && (match[1].length != 0)){ //<----- this changed too
eval(match[1]);
}
}
var el = document.getElementById(id);
if(el){el.parentNode.removeChild(el);}
if(typeof callback == 'function'){
callback();
}
});