`

执行ajax加载页面中的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);

// 第二步:如果包含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]);
			}
		}
	}
}
 

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

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

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

分享到:
评论
1 楼 wenxiang_tune 2010-12-23  
果然是代码洁癖者,不过这些个正则对一般人可够呛

相关推荐

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

    有一个公用页面需要在多个页面调用,其中涉及到部分js已经写在了公用页面中,通过ajax加载该页面后无法执行其中的js。 解决思路 1. 采用附加一个iframe的方法去执行js,为我等代码洁癖者所不齿。 2. 使用[removed]...

    实例详解Android Webview拦截ajax请求

    本篇内容主要给大家讲解了Android Webview拦截ajax请求的详细讲解,需要的朋友一起来学习一下。

    AJAX无刷新聊天室技术

    l 动态检测网页中的数据,无需页面重复加载。例如,动态检测网络考试系统倒记时时间,无需页面重复加载,并等待服务器重新发送整个页面。 l 提升站点的性能,这是通过减少从服务器下载的数据量而实现的。例如,在...

    使用ajax加载的页面中包含的javascript的解决方法

    1、【使用iframe】 在需要加载的页面中添加一个iframe,如下 代码如下: &lt;iframe style=”display:none” onload=”[removed] close_ticket_onload()”&gt;&lt;/iframe&gt; onload中添加你所要调用的函数,如果...

    jquery的ajax同步和异步的理解及示例

    这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。 而异步则这个AJAX代码运行中的时候其他代码一样可以...

    Ajax-bootstrap-star-rating-codeigniter.zip

    Ajax-bootstrap-star-rating-codeigniter.zip,带编码器点火器的动态自举星级评定,ajax代表异步javascript和xml。它是多种web技术的集合,包括...它用于创建动态网页,其中网页的小部分在不重新加载网页的情况下更改。

    jQuery实现AJAX定时刷新局部页面实例

    局部刷新我们讲述到最多的是ajax 了,当然也可以不使用ajax来刷新页面了,我们可以使用jquery中的append来给指定内容加东西了,当然最实用的还是ajax加载数据了。 例子,定时局部刷新 定时局部刷新用到jQuery里面的...

    《Ajax与PHP基础教程》第二章.

    虽然Ajax也能够用于很简单的目的,诸如载入HTML页面,执行表单验证之类的普通任务, 但其威力只有在与强大的服务器端脚本语言协作时才发挥出来. 本书中讨论的服务器端脚本语言 是PHP.当把Ajax客户端交互概念与PHP...

    【卷一/共两卷】AJAX实战pdf高清版90M

    4.3.3 在JavaScript中实现灵活的事件模型 4.4 Ajax应用中的模型 4.4.1 使用JavaSctjpt为业务领域建模 4.4.2 与服务器交互 4.5 从模型生成视图 4.5.1 JavaScript对象的反射 4.5.2 处理数组和对象 4.5.3 添加控制器 ...

    PHP培训教程之AJAX技术.docx

    7、AJAX请求总共有多少种CALLBACK Ajax请求总共有八种Callback onSuccess onFailure onUninitialized onLoading onLoaded onInteractive onComplete onException ... javascript一种在浏览器端执行的脚本语言...

    ajax-amd:Ajax.js是一个帮助ajax请求的库。 该库使用amd结构

    您只需要使用进行安装并在页面上加载elo7-ajax-amd文件即可。 方法 得到 .get(url, data [,callbacks] [,config]) 描述: 使用get http方法执行ajax请求。 样品: define ( [ 'ajax' ] , function ( ajax )

    基于ApacheNutch和Htmlunit的扩展实现AJAX页面爬虫抓取解析插件nutch-htmlunit.zip

    基于Apache Nutch 1.8和Htmlunit组件,实现对于AJAX加载类型页面的完整页面内容抓取解析。 According to the implementation of Apache Nutch 1.8, we can't get dynamic ...

    ajax中的async属性值之同步和异步及同步和异步区别

    这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出现假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。而异步则这个AJAX代码运行中的时候其他代码一样可以...

    php - ajax

    它不是新的编程语言,而是一种使用现有标准的新方法,最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容,不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。...

    浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入

    总的来看,这两种方法都能达到脚本加载不影响页面解析和渲染的作用,但是在不同的浏览器中,这两种技术所创建的脚本的执行时机还是有一定差异,今天我们再来探讨一下通过动态脚本技术和Ajax注入的脚本在这些方面的...

    AJAX 源码范例

    06/6.1.6.html prototype原型对象范例 06/6.2.6.html 函数的apply、call方法和length属性范例 06/6.2.7.html 深入认识JavaScript中的this指针范例 06/6.3.2.html 使用prototype对象定义类成员...

    AJAX、http传输协议、响应状态码、请求方式

    AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。 AJAX 不需要任何浏览器插件,但需要用户允许 JavaScript 在浏览器上执行 ———————————————— 版权声明:...

    Ajax-Ajax-CRUD-example-in-laravel.zip

    Ajax-Ajax-CRUD-example-in-laravel.zip,使用ajax在laravel中执行crud操作的示例。,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小...

    JavaScript完全自学宝典 源代码

    示例描述:学习JavaScript中的document对象。 8.1.html 得到文档锚点对象数组。 8.2.html 获取并设置cookie信息。 8.3.html 获取文档标记的数组及相关操作。 8.4.html 获取location对象的属性值并...

Global site tag (gtag.js) - Google Analytics