转:执行ajax加载页面中的js
2015-08-21 16:28
465 查看
看了《执行ajax加载的页面中包含的javascript》一文,最近刚好被这个问题纠结过,献给痛不欲生的童鞋们…
2.使用document.write输出代码,我等简洁主义者所不愿。
3.最简单的方法是把js放到需要调用的父页面,那想这样的公用页面,每个地方调用都要写入一次,代码冗余。
4.eval是个解决方法,虽然低效。
5.复杂的解决方法:正则匹配出加载页面中的所有js,为这些js创建同样多个<script>标签,把js内容插入即可执行。但使用中发现,firefox可行,但IE还是不从。(师太,您就从了吧~)
事件背景
有一个公用页面需要在多个页面调用,其中涉及到部分js已经写在了公用页面中,通过ajax加载该页面后无法执行其中的js。解决思路
1.采用附加一个iframe的方法去执行js,为我等代码洁癖者所不齿。2.使用document.write输出代码,我等简洁主义者所不愿。
3.最简单的方法是把js放到需要调用的父页面,那想这样的公用页面,每个地方调用都要写入一次,代码冗余。
4.eval是个解决方法,虽然低效。
5.复杂的解决方法:正则匹配出加载页面中的所有js,为这些js创建同样多个<script>标签,把js内容插入即可执行。但使用中发现,firefox可行,但IE还是不从。(师太,您就从了吧~)
解决方案
综合以上多种方式,排除不利因素,总结出一个比较实用的方法,可以满足类似这样公用页面的执行ajax加载的js的需求,在ajax加载的公用函数里面加上代码即可。主要代码如下://第一步:匹配加载的页面中是否含有js varregDetectJs=/<script(.|\n)*?>(.|\n|\r\n)*?<\/script>/ig; varjsContained=ajaxLoadedData.match(regDetectJs); //第二步:如果包含js,则一段一段的取出js再加载执行 if(jsContained){ //分段取出js正则 varregGetJS=/<script(.|\n)*?>((.|\n|\r\n)*)?<\/script>/im; //按顺序分段执行js varjsNums=jsContained.length; for(vari=0;i<jsNums;i++){ varjsSection=jsContained[i].match(regGetJS); if(jsSection[2]){ if(window.execScript){ //给IE的特殊待遇 window.execScript(jsSection[2]); }else{ //给其他大部分浏览器用的 window.eval(jsSection[2]); } } } }
相关文章推荐
- Javascript 执行环境及作用域
- 获取Json文件的方法
- js+正则+单双引号问题
- js实现类似trim函数
- javascript 的点击复制事件
- jsDuck的注释说明
- Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
- JavaScript 常见安全漏洞和自动化检测技术
- js+css实现文字散开重组动画特效代码分享
- js个人笔记
- Winform中调用js函数
- json-server模拟服务器数据
- js到服务器端的URL中文乱码问题
- JSON 解析器。JSON.stringify和JSON.parse
- "Could not load file or assembly \u0027Newtonsoft.Json, Version=4.5.0.0
- JS给元素增加className
- 21、javascript 基础
- json 数组操作
- js 全选
- coco2d js 修改预加载,使用自定义图片