Tengo un plugin de WordPress que carga páginas con AJAX y para garantizar la compatibilidad con otros complementos y "widgets".¿Cuál es el mejor método para sandbox dinámicamente en línea?
A partir de ahora uso el siguiente código de evaluar toda la JS en línea que está dentro de los bloques de contenido que se actualicen:
function do_JS(e){
var Reg = '(?:<script.*?>)((\n|.)*?)(?:</script>)';
var match = new RegExp(Reg, 'img');
var scripts = e.innerHTML.match(match);
var doc = document.write;
document.write = function(p){ e.innerHTML = e.innerHTML.replace(scripts[s],p)};
if(scripts) {
for(var s = 0; s < scripts.length; s++) {
var js = '';
var match = new RegExp(Reg, 'im');
js = scripts[s].match(match)[1];
js = js.replace('<!--','');
js = js.replace('-->','');
eval('try{'+js+'}catch(e){}');
}
}
document.write = doc;
}
Me gustaría ser capaz de sandbox de la JS un poco mejor por lo que el riesgo de conflictos se reduce al mínimo. Una idea que tenía era crear dinámicamente un y ejecutar el JS dentro de él, pero esperaba que hubiera un método un poco mejor para garantizar la compatibilidad y aumentar la seguridad.
Desafortunadamente, este complemento se ejecuta en cientos de sitios que no controlo en absoluto, por lo que no puedo ejecutar fragmentos de JS a través de Caja como un sitio como myspace. La solución debe ser redistribuible. –