首页 > 建站教程 > JS、jQ、TS >  Ajax动态加载的html页面不能执行其中的js代码正文

Ajax动态加载的html页面不能执行其中的js代码

利用jQuery的load或者ajax的方法,能够轻松实现前端的无刷新载入页面。详见:Ajax+History实现局部刷新页面,局部载入页面。但是,如果被载入页面有js的话,会发现js无法执行。下面的代码通过正则匹配被载入页面内容中的js代码,然后通过js的eval函数,执行下,即可解决这个问题:
// 第一步:匹配加载的页面中是否含有js
var regDetectJs = /<script(.|\n)*?>(.|\n|\r\n)*?<\/script>/ig;
var jsContained = ajaxLoadedData.match(regDetectJs); //ajaxLoadedData为ajax获取到的数据
// 第二步:如果包含js,则一段一段的取出js再加载执行
if(jsContained) {
  // 分段取出js正则
  var regGetJS = /<script(.|\n)*?>((.|\n|\r\n)*)?<\/script>/im;
  // 按顺序分段执行js
  var jsNums = jsContained.length;
  for (var i=0; i<jsNums; i++) {
    var jsSection = jsContained[i].match(regGetJS);
    if(jsSection[2]) {
      if(window.execScript) {
        // 给IE的特殊待遇
        window.execScript(jsSection[2]);
      } else {
        // 给其他大部分浏览器用的
        window.eval(jsSection[2]);
      }
    }
  }
}