今天在DZ X2.5开发中插件发现有个诡异的现象,在member/login.htm里钩子logging_input处插入了一段js代码,模板通过ajax被前台以弹出层形式调出(其实就是登录框弹出层),此时js正常执行,关闭弹出层,再一次弹出js就不执行了。
解决办法:在js标签上加上reload=1就OK了
<script type="text/javascript" reload="1">
//todo...
</script>
问题解决的同时了解到了dz 异步获取xml文档后,激活xml文档里js脚本的机制。
关键代码可以查看static/js/common.js
function evalscript(s) {
if(s.indexOf('<script') == -1) return s;
var p = /<script[^\>]*?>([^\x00]*?)<\/script>/ig;
var arr = [];
while(arr = p.exec(s)) {
var p1 = /<script[^\>]*?src=\"([^\>]*?)\"[^\>]*?(reload=\"1\")?(?:charset=\"([\w\-]+?)\")?><\/script>/i;
var arr1 = [];
arr1 = p1.exec(arr[0]);
if(arr1) {
appendscript(arr1[1], '', arr1[2], arr1[3]);
} else {
p1 = /<script(.*?)>([^\x00]+?)<\/script>/i;
arr1 = p1.exec(arr[0]);
appendscript('', arr1[2], arr1[1].indexOf('reload=') != -1);
}
}
return s;
}