Mine视频解析插件中, 编辑器弹出添加视频窗口时,用到了discuz系统中的js函数showWindow, 这个函数在第一次弹出窗口时,会加载窗口内容中的js,第二次就不再加载。这导致有些数据和绑定的点击事件失效,怎么处理?
查看了js代码,在/static/js/common.js文件中,有个evalscript的函数,代码如下
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;
}
仔细看这个代码,我们发现,如果在script标签中加上 reload=”1″ ,那么每次加载弹窗,都会执行这些js,测试一下,果不其然。
发表回复