`

执行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 载入JS文件,载入CSS文件,载入JS函数,执行JS

    随着Web开发技术的不断发展,AJAX(Asynchronous JavaScript and XML)作为一种重要的前端技术,它允许网页可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。本文将详细介绍如何利用AJAX在...

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

    当HTML通过Ajax加载时,浏览器并不像正常加载页面那样解析和执行其中的JavaScript。为了解决这个问题,开发者通常会尝试以下几种方案: 1. **使用IFrame**:将动态加载的HTML放入一个IFrame中,由IFrame来解析和...

    解决ajax返回innerHTML中javascript不能运行问题

    在实际应用中,我们经常会遇到使用 Ajax 返回某一个网页的内容到模板页面的某一个 `&lt;div&gt;` 标签中显示的操作。如果返回的值仅仅是文本类数据,不会影响模板页面的功能,但是如果返回的数据包括 JavaScript,那么直接...

    Ajax的加载,跳转页面

    Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它的核心在于利用JavaScript异步地与服务器交换数据并更新页面的局部内容,从而提升了用户体验,使得网页...

    解决js ajax同步请求造成浏览器假死的问题

    在Web开发中,JavaScript的AJAX技术允许我们异步地加载数据或请求服务器,以更新网页的某个部分而不必重新加载整个页面。在正常情况下,我们推荐使用异步请求,因为它们不会阻塞用户界面,从而允许用户继续与页面上...

    处理ajax返回的js代码

    总结来说,处理Ajax返回的JS代码涉及到创建和配置XMLHttpRequest对象,监听和处理响应,以及安全执行返回的JavaScript代码。在实际项目中,还需要结合其他Web开发技术,如HTML、CSS、jQuery等,并遵循最佳实践,确保...

    Javascript ajax加载Loading

    总结起来,JavaScript AJAX加载指示器结合GIF动图是提高用户体验的有效手段。通过监听AJAX请求的状态,我们可以适时地显示和隐藏加载动图,从而告知用户后台正在处理数据。在实际项目中,可以根据需求进行调整和扩展...

    jquery .ajax 局部刷新之后 js无法调用问题解决

    在JavaScript和jQuery的世界里,`.ajax`方法是用于异步数据通信的核心工具,它使得页面无需重新加载就能更新部分内容。然而,在使用`.ajax`进行局部刷新后,有时会出现JavaScript无法正确调用的问题,这主要涉及到...

    使用Ajax实现页面表格添删改查的异步刷新操作

    在网页开发中,异步数据交互是提升用户体验的关键技术之一,AJAX(Asynchronous JavaScript and XML)正是实现这一目标的有效工具。"使用Ajax实现页面表格添删改查的异步刷新操作"是一个实用的技术实现,它允许用户...

    Ajax刷新 java Ajax 页面刷新

    Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。在Java中,我们可以利用Ajax实现页面的动态刷新,提高用户体验,因为它允许后台与服务器进行异步数据交换...

    php+ajax加载数据转圈动画图片.zip

    通过这种方式,用户可以一边浏览页面,一边等待数据加载,同时看到加载动画(如"ajax加载数据转圈动画图片.gif"),提高了用户体验。 加载动画是用户体验设计中的一个重要元素,特别是在数据加载期间,它可以帮助...

    Ajax网页源码抓取程序

    然而,对于常规的网页抓取工具而言,Ajax加载的内容可能不会被直接捕获,因为它们是在页面加载后由JavaScript动态生成的。 **C# WebBrowser控件** 在C#编程中,`WebBrowser`控件是一个强大的工具,它可以模拟...

    ajax 动态加载 jsp 和servlet

    2. **创建XMLHttpRequest对象**:在JavaScript中创建XMLHttpRequest对象,它是Ajax通信的基础。 3. **打开连接**:使用XMLHttpRequest对象的`open()`方法,指定请求类型(GET或POST)、URL(通常是Servlet的URL)...

    loading(各种AJAX加载图片)

    在网页开发中,AJAX(Asynchronous JavaScript and XML)是一种创建动态网页的技术,它允许页面在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。"loading(各种AJAX加载图片)"这个主题,主要关注...

    ajax应用个人总结

    Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。在这个例子中,我们看到一个简单的Ajax应用,...

    网页版聊天插件(错误更正) ajax+xml+js

    JavaScript是构建此类插件的关键,它是浏览器端的主要脚本语言,负责处理用户交互、操作DOM(文档对象模型)、执行AJAX请求等。在这个修复后的版本中,JavaScript代码可能包含了错误修正的部分,确保了聊天功能的...

    AJAX电子书(总结)

    1. **创建XMLHttpRequest对象**:在JavaScript中,通过`new XMLHttpRequest()`创建一个新的实例。 2. **打开连接**:调用`open()`方法,指定请求类型(GET、POST等)、URL和是否异步。 3. **设置请求头**:如果...

    页面局部加载,适合Ajax Loading

    总结来说,页面局部加载结合Ajax技术,能够提升网页的交互性和性能,提供更流畅的用户体验。通过滚动加载、点击加载等多种方式,可以有效地处理大量数据的展示,同时关注兼容性、SEO优化和性能,使网站更加高效和...

    使用Ajax动态加载JSON文件

    此外,现代浏览器提供了`fetch` API,它提供了一种更简洁的接口来执行Ajax请求: ```javascript fetch('data.json') .then(response =&gt; response.json()) .then(data =&gt; { // 处理返回的JSON数据,动态插入到...

Global site tag (gtag.js) - Google Analytics