让插入到 innerHTML 中的 javascript 跑起来
来源:经典论坛 发布时间:2008-07-01 13:14:00
andot提出问题:
在做 ajax 编程时,我们常常需要将 xmlhttp 获取到的页面内容通过 innerHTML 来赋给某个容器(比如 div、span 或者 td 等),但是这里存在一个问题,就是我们将要赋给 innerHTML 的页面内容如果包含有脚本程序,这些脚本程序不管是外部脚本,还是内部脚本,可能都不会被执行。这个问题在某些时候微不足道,甚至可以忽略,但有些时候,这个问题就非常严重,它很可能让我们的程序得不到预期的结果。因此我们需要解决这个问题。
由于andot的解决方法不允许转载,想看的朋友点击文章来源。
Sheneyan 问:
<script>
document.write("asdfdsf");
</script>
这种类型的脚本如何处理?
bound0 答:
对于write和writeln这两个函数的办法就是把它们覆盖(或重载)掉。
但是对于src为独立文件的代码,需要先调用xmlhttp等控件取得代码内容,而这一步将沦为安全性受限步骤。
起初我也考虑过直接重新定义 document.write 和 document.writeln ,但是在效果和副作用之间徘徊不定,如今看来是利大于弊的,还是andot兄弟能够当机立断。
外部脚本的加载问题恐怕还是得用xmlhttp,用延时的办法终究还是不保险。 hutia兄弟 说的作用域的问题在 this 的指向上会有所体现。这些地方我们还得想办法改进。
还有一点就是通过document.write写脚本的情况我还没考虑。一步一步慢慢来吧!
document.write的定位问题可以通过对html代码和script代码的统筹施放来实现。
用document.write()写scripts的问题也已经解决了!
需要5.5+版本的scripts引擎(支持数组方法)
示例如下:
hutia 答:
不过说实在话我觉得为了这个东西花费太多精力不值得......如果你只是为了让script跑起来,可以这样:
theScriptToRun=xmlHttp.responseText;
//取得要运行的代码
var theTempIFrame=document.createElement("IFRAME");
theTempIFrame.style.display="none";
//创建一个隐藏的IFRAME
document.body.appendChild(theTempIFrame);
theFrameElement=window.frames[window.frames-1];
theFrameElement.document.open();
theFrameElement.document.clear();
theFrameElement.document.write(theScriptToRun);
theFrameElement.document.close();
//写入要执行的代码
theTempIFrame.outerHTML="";
//删除IFRAME元素
这种方法就是通过将HTML写入IFrame中来执行,原理类似论坛的运行代码功能,优点是不论写入的代码形式如何一律通吃,缺点是代码本身需要针对这种方式来写,引用页面元素的时候得用parentWindow.xxx来引用
猜你喜欢
- 下面代码的功能是为了管理任务的,大家项目中有需要用到的,尽管拿去吧。 这个东西用于可以管理任务比如:今天我要做什么,做了没有,做了就打钩。&
- 为了防止再次被攻击,做个验证码过滤程序是必要的。我在网上找了一些资料,觉得用别人做好的代码总是很不爽,自己做麻又不会写复杂的代码,特别是生成
- 昨天在W3C看到,6月10日发布了新的 HTML 5 草案(Working Draft)。粗略的读了一下它提供的 新版本说明文档 ,作了一点
- asp连接mysql的问题ASP连接Mysql数据库的问题。下了一个MySql 的ODBC驱动。做了个小测试。顺利通过。先记录下来,中间还有
- 今天遇到这个问题,上网查到以下解决方法:1.检查你的磁盘剩余空间是否足够,如果没有磁盘剩余空间,则清理磁盘,腾出空间
- <%@ language=vbscript codepage=65001%> <
- 相信有很多人有用程序向Excel导数据的需求, 且做过. 一般导出一些文本数据是很方便的, 可选方法很多, 比如拼接文本字符串存.cvs格式
- 在用HTML(HyperText Markup Language,超文本链接标示语言)语言编写Web页面时,由于所用的Web浏览器对HTML
- 这个翻滚代码没有使用什么marquee或者其它位移方法,而是每隔一秒把列表最顶端的那个li删掉,把这个li里面的内容插入到最底端新生成的li
- 一个很简单的画像素画的小工具,有意思的地方在于可以把画的图案保存成数组,以方便之后快速还原出原图..<!DOCTYPE html PU
- 本文介绍了10个asp网页制作的常用到的技巧,有asp的也有javascript。如asp如何获取系统时间,如何取得IP,及浏览
- 一.权限表mysql数据库中的3个权限表:user 、db、 host权限表的存取过程是:1)先从user表中的host、 user、 pa
- 一般写ASP PHP代码的朋友都估计是采用直接操作SQL的吧~ 看以下的代码 <% dim conn,rs&nbs
- 如今,互联网越来越走近我们的生活,网上冲浪也渐渐成为我们生活不可缺少的一部分。网络世界五彩缤纷,涌现出大量优秀精美的网页。大量网络信息的呈现
- 1、从外部文档中粘贴时,如果不想要其格式,只要文字,可以使用“Edit->paste as text”命令,而不要直接Ctrl+V。2
- 最近项目中要用到一个正则表达式,排除某个字符串,我们知道排除单个字符串的话,可以用[^abc],这样就可以排除a或者b或者c了,但是要排除a
- 使用jmail组件发送邮件:Function JMail(Send_From,Send_To,Send_Subject,Send_
- 最近试用mysql proxy,遇到若干问题,好在一一找到了解决方案,列出来备忘。这次使用的版本是0.6.x,也许新版本就没有这些问题了。无
- 来自Six Revisions的一篇文章,作者对一些主流的浏览器进行了测试比较,测试主要针对以下几个方面进行:1.JavaScript执行速
- by leecade :我聊下我的想法 从功能上看,能不能把JS分成3层结构1 语法设计,选择器,常用函数2 业务逻辑(比如封装好常用的TA