innHTML后执行其内的js
[ 2014-05-26 10:25:33 | 作者: admin ]
晚上看人人网,ajax里返回html内有script,源码中貌似用innerHTML的,what?怎么可能。
innerHTML不执行字符串内脚本的。源码中发现:
$('ajaxContainer').innerHTML = r.responseText;
$('ajaxContainer').eval_inner_JS();
eval_inner_JS??啥个东东?应该是把script标记又抽离出来单独创建运行吧。
自己写个,暂时还没完全测试,先放着留个思路:
executjavaScriptString: function (scriptText) {
var element = document.createElement('script');
element.type = 'text/javascript';
try {
element.innerHTML = scriptText;
} catch (e) {
element.text = scriptText;
}
document.body.appendChild(element);
//创建流执行后立即删除节点
setTimeout(function(){
jsCore.DOM.removeNode(element);
},0);
},
executInnerjavaScript:function(element) {
var scripts = element.getElementsByTagName_r('script');
for (var i = 0,len=scripts.length; i < len; i++) {
if (scripts[i].src) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = scripts[i].src;
document.body.appendChild(script);
//创建流执行后立即删除节点
setTimeout(function(){
jsCore.DOM.removeNode(element);
},0);
} else {
try {
jsCore.DOM.executjavaScriptString(scripts[i].innerHTML);
} catch (e) {}
}
}
},
评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2200
innerHTML不执行字符串内脚本的。源码中发现:
$('ajaxContainer').innerHTML = r.responseText;
$('ajaxContainer').eval_inner_JS();
eval_inner_JS??啥个东东?应该是把script标记又抽离出来单独创建运行吧。
自己写个,暂时还没完全测试,先放着留个思路:
executjavaScriptString: function (scriptText) {
var element = document.createElement('script');
element.type = 'text/javascript';
try {
element.innerHTML = scriptText;
} catch (e) {
element.text = scriptText;
}
document.body.appendChild(element);
//创建流执行后立即删除节点
setTimeout(function(){
jsCore.DOM.removeNode(element);
},0);
},
executInnerjavaScript:function(element) {
var scripts = element.getElementsByTagName_r('script');
for (var i = 0,len=scripts.length; i < len; i++) {
if (scripts[i].src) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = scripts[i].src;
document.body.appendChild(script);
//创建流执行后立即删除节点
setTimeout(function(){
jsCore.DOM.removeNode(element);
},0);
} else {
try {
jsCore.DOM.executjavaScriptString(scripts[i].innerHTML);
} catch (e) {}
}
}
},

这篇日志没有评论。
此日志不可发表评论。