让插入到 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来引用

标签:innerHTML,javascript,代码
0
投稿

猜你喜欢

  • Oracle数据库密码文件的使用与维护

    2010-07-28 13:27:00
  • asp 使用正则表达式替换word中的标签,转为纯文本

    2011-02-28 10:49:00
  • sqlserver中将varchar类型转换为int型再进行排序的方法

    2012-07-11 15:34:41
  • 正在研究XMLHTTP如何正确传送大于7F(127)的二进制数据

    2008-09-13 18:41:00
  • ASP连接MSSQL的错误: 拒绝访问

    2008-11-23 20:40:00
  • 如何快速地更新网页内容?

    2010-01-01 15:12:00
  • asp如何设置cookie的过期时间

    2008-02-29 13:36:00
  • Asp Response.Expires 属性介绍

    2008-02-19 17:02:00
  • 如何做网页设计的10个小窍门

    2010-04-11 22:30:00
  • 用SQL语句生成带有小计合计的数据集脚本

    2009-01-06 11:33:00
  • Oracle数据表分区的策略

    2010-07-28 12:59:00
  • 日期垂直排列的两种技巧

    2009-08-28 12:38:00
  • 鼠标双击滚动屏幕单击停止代码

    2008-02-21 11:44:00
  • 按键标示的设计体验

    2008-08-27 12:06:00
  • ajax代理程序,自动判断字符编码

    2007-11-04 13:17:00
  • asp如何在刷新链接之前验证文件是否存在?

    2010-06-22 21:09:00
  • 如何使用w3 upload上传组件上传文件?

    2010-05-16 15:11:00
  • FrontPage2002简明教程二:文字与图像的处理

    2008-09-17 11:13:00
  • VBScript中清除数组元素Erase语句

    2008-06-27 13:05:00
  • MYSQL数据库设计的一点总结

    2008-05-24 09:36:00
  • asp之家 网络编程 m.aspxhome.com