• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Ajax 动态载入html页面后不能执行其中的js快速解决方法

    事件背景

    有一个公用页面需要在多个页面调用,其中涉及到部分js已经写在了公用页面中,通过ajax加载该页面后无法执行其中的js。

    解决思路

    1. 采用附加一个iframe的方法去执行js,为我等代码洁癖者所不齿。

    2. 使用document.write输出代码,我等简洁主义者所不愿。

    3. 最简单的方法是把js放到需要调用的父页面,那想这样的公用页面,每个地方调用都要写入一次,代码冗余。

    4. eval是个解决方法,虽然低效。

    5. 复杂的解决方法:正则匹配出加载页面中的所有js,为这些js创建同样多个script>标签,把js内容插入即可执行。但使用中发现,firefox可行,但IE还是不从。(师太,您就从了吧~)

    解决方案

    综合以上多种方式,排除不利因素,总结出一个比较实用的方法,可以满足类似这样公用页面的执行ajax加载的js的需求,在ajax加载的公用函数里面加上代码即可。主要代码如下:

    // 第一步:匹配加载的页面中是否含有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; ijsNums; i++) {
        var jsSection = jsContained[i].match(regGetJS);
        if(jsSection[2]) {
          if(window.execScript) {
            // 给IE的特殊待遇
            window.execScript(jsSection[2]);
          } else {
            // 给其他大部分浏览器用的
            window.eval(jsSection[2]);
          }
        }
      }
    }

    解说下:window.execScript就IE认,其他浏览器需要用eval啦。

    总结

    以上所述是小编给大家介绍的Ajax 动态载入html页面后不能执行其中的js快速解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • JS 拦截全局ajax请求实例解析
    • Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
    • js 实现ajax发送步骤过程详解
    • Ajax跨域问题及解决方案(jsonp,cors)
    • $.ajax中contentType: “application/json” 的用法详解
    • ajax获得json对象数组 循环输出数据的方法
    • 通过jquery的ajax请求本地的json文件方法
    • javascript写一个ajax自动拦截并下载数据代码实例
    上一篇:Ajax获取回调函数无法赋值给全局变量的问题
    下一篇:ajax与websocket的区别以及websocket常用使用方式 介绍
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    Ajax 动态载入html页面后不能执行其中的js快速解决方法 Ajax,动态,载入,html,页面,