网络编程
位置:首页>> 网络编程>> JavaScript>> 让插入到 innerHTML 中的 javascript 跑起来

让插入到 innerHTML 中的 javascript 跑起来

 来源:经典论坛 发布时间:2008-07-01 13:14:00 

标签:innerHTML,javascript,代码

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来引用

0
投稿

猜你喜欢

  • 下面代码的功能是为了管理任务的,大家项目中有需要用到的,尽管拿去吧。 这个东西用于可以管理任务比如:今天我要做什么,做了没有,做了就打钩。&
  • 为了防止再次被攻击,做个验证码过滤程序是必要的。我在网上找了一些资料,觉得用别人做好的代码总是很不爽,自己做麻又不会写复杂的代码,特别是生成
  • 昨天在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
手机版 网络编程 asp之家 www.aspxhome.com