我有一個WordPress插件,可以通過AJAX加載頁面,並確保與其他插件和「小部件」的兼容性。什麼是動態沙箱內聯JavaScript的最佳方法?
截至目前我使用下面的代碼來評估所有的內聯JS就是裏面的內容塊進行更新:
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;
}
我希望能夠沙箱JS更好一點所以衝突風險最小化。我的一個想法是動態創建一個並在其中運行JS,但我希望有一個更好的方法來確保兼容性和增加安全性。
不幸的是,這個插件運行在數百個我根本不能控制的站點上,所以我不能通過Caja運行JS片段,就像myspace這樣的站點。該解決方案需要重新分配。 – 2010-06-28 23:08:27