事件背景

有一个公用页面需要在多个页面调用,其中涉及到部分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);//第二步:如果包含js,则一段一段的取出js再加载执行
if(jsContained) {//分段取出js正则var regGetJS = /<script(.|\n)*?>((.|\n|\r\n)*)?<\/script>/im;//按顺序分段执行jsvar 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]);}}}
}

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

至此,算比较完美的解决。

转自:http://www.impng.com/web-dev/execscript-loaded-by-ajax.html

转载于:https://www.cnblogs.com/zjhblogs/p/5508666.html

ajax 载入html后不能执行其中的js解决方法相关推荐

  1. layui表单提交使用form.on(‘submit(sub)‘,function (){}) 使用ajax请求时回调不执行的原因及解决方法

    layui表单提交使用form.on('submit(sub)',function (){}) 使用ajax请求时回调不执行的原因及解决方法 参考文章: (1)layui表单提交使用form.on(' ...

  2. IE8浏览器缓存问题导致Ajax的GET请求只能执行一次的解决办法

    转载自  IE8浏览器缓存问题导致Ajax的GET请求只能执行一次的解决办法 最近在测试兼容性问题的时候发现,使用Ajax的GET请求向后台获取响应结果时,如果是IE8浏览器,第一次发送请求时会得到正 ...

  3. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  4. php ajax sucess 失败,Ajax请求发送成功但不进success的解决方法(图文教程)

    下面我就为大家分享一篇Ajax请求发送成功但不进success的解决方法,具有很好的参考价值,希望对大家有所帮助. 1.情况描述:ajax发送成功,后台也成功响应请求,并返回了json数据,通过chr ...

  5. android删除打开方式,Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)...

    Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...

  6. win7更新错误0x800b0109_win7更新漏洞后产生0x0000006B蓝屏的解决方法图解

    这几天不少网友在使用win7更新补丁后就蓝屏了,代码为0x0000006b.发生这一蓝屏问题的都是安装了2016年四月份推出的安全更新补丁,安装后就出现蓝屏,有的网友表示没问题,有的直接蓝了.这个蓝屏 ...

  7. 计算机右键管理提示没有关联应用,win10计算机右键管理 没有与之关联的程序来执行此操作的解决方法...

    最近有朋友问小编win10计算机右键管理 没有与之关联的程序来执行此操作怎么办,对于这个问题,相信已经有很多朋友遇到过了,有的朋友在电脑上右键"管理",发现无法打开,提示:&quo ...

  8. c# :Form1_Load()不被执行的三个解决方法

    c# -- Form1_Load()不被执行的三个解决方法 我的第一个c#练习程序,果然又出现问题了...在Form1_Load() not work.估计我的人品又出现问题了. 下面实现的功能很简单 ...

  9. linux显卡驱动运行情况,Linux装完显卡驱动后分辨率显示不正常的解决方法

    不少人在更新完Linux显卡驱动后,出现分辨率显示不正常的现象,遇到这类问题不用担心,下面小编就教你如何解决Linux显卡驱动安装后分辨率无法正常显示的问题,一起来学习下吧. 驱动安装: 这里得说明一 ...

最新文章

  1. 20172310 2017-2018-2 《程序设计与数据结构》第四周学习总结
  2. ios警告与提示对话框
  3. 完全备份、差异备份、增量备份的区别
  4. virtual machine(vmware)知识
  5. Landsat中国西北地区行列号Shapefile图层对照(附行列号Shapefile下载)
  6. OceanBase再破纪录!核心成员陈萌萌:坚持HTAP就是坚持我们做数据库的初心
  7. 按条件增加列_12个公式解决Excel按条件多列求和,掌握两、三个就够用了
  8. android调用python框架_在Java中从Android应用程序执行Python脚本?
  9. ERROR: Process pool report error: Can‘t pickle
  10. 《Cracking the Coding Interview》——第9章:递归和动态规划——题目8
  11. 为什么iPad-WIFI版无3G模块也可以准确定位?
  12. 树莓派-解决apt-get upgrade速度慢的方法[更换阿里云源]
  13. 三分钟了解APS系统中生产计划排程模块的基本原理
  14. java sftp 读取文件_Java代码获取SFTP服务器文件
  15. 计算机安全权限不足或配置文件损坏,Windows XP用户配置文件丢失或损坏后的恢复方法...
  16. c语言编木马程序,5分钟教会!C语言远程控制木马:“控制端”制作,附送源码!...
  17. 安卓禁用硬件加速_详解Android开发中硬件加速支持的使用方法
  18. QQ浏览器登陆微信后,下载接收的文件保存在了哪里
  19. Latex加批注 更改
  20. FreeCodeCamp:Slasher Flick

热门文章

  1. 看图理解scrollTop,scrollLeft,clientWidth,clientHeight,offsetWidth,offsetHeight
  2. asp.net 中GridView控件实现全选及反选的功能
  3. linux 内核驱动编程 简单例子 与_IO, _IOR, _IOW, _IOWR 宏解析
  4. Visual Studio原生开发的20条调试技巧(下)
  5. Android最佳性能实践(二)——分析内存的使用情况
  6. Linux内核开发工作方向
  7. 算法一:求两个数的和
  8. python十五:函数作用域-函数即变量
  9. UVA - 673 (括号的匹配)
  10. script type=text/template是干什么的,为什么要把html写在js中? 这是什么编程语言风格,都能这样用吗?...