找回密码
 注册

只需一步,快速开始

蓝色理想 最新研发动态 新增登录提醒插件 - 用至我的站点 地图任务一定要做 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

MIUI手机主题设计大赛,奔驰大奖等你拿! 想加薪?!蓝色理想招聘提供你更多机会 悬赏答疑,赚取积分兑奖品!

查看: 88|回复: 2

CHancarDong看过来,关于异步执行script [复制链接]

hutia 楼主

诘屈聱牙

荣誉管理

帖子
5803
体力
23580
威望
367
居住地
江苏省 苏州市
发表于 2012-5-9 19:47:43 |显示全部楼层
本帖最后由 hutia 于 2012-5-9 19:49 编辑

不高兴回帖,直接新开一个主题贴。

我根据你的帖子,猜测你的问题是这样的(说实话,我觉得你之前的帖子完全没解释清楚你的问题所在):

1. 你有一个页面,这个页面中你用 ajax 异步方式获取了一段 html

2. 异步获取的 html 中有 script。你现在想要把这段 html 放到某个容器中,但是这时候你发现 script 没有被执行。


那么理清思路,解决方法就很简单:

1. 将 获取到的 html 分段,生成数组 [非脚本, 脚本, 非脚本, ........]

2. 重载 document.write 和 eval 函数 (视情况而定,也许 eval 不必重载,也许 Function 都要重载)。具体方法后文分析。

3. 遍历这个数组,遇到 非脚本,将其作为 document fragment 插入容器。遇到脚本,使用 window.execScript (IE) 或 window.eval (非 IE) 来执行



然后是细节:

1. 如何重载 document.write
记得前面让你把 html 分段了吗,在将 非脚本部分插入容器后,在其后面跟着立刻插入一个空的 document fragment
然后在你重载的 document.write 里,将收到的字符串参数直接 用 innerHTML 放入那个 document fragment 里就可以了
(ps:有些情况下,这里的处理会比较复杂,如果你还有疑问,我可以给你写个示例代码)

2. 把 html 分段后处理,就已经保证了脚本执行时的上下文正确(即脚本内容前的 html 内容已经在 dom 中存在)


========= 分割 =================
所以你看,完全没难度啊,你只需要把自己的问题理清楚,解决办法就会自己出来的

老饕

版主  

帖子
6801
体力
9233
威望
287
发表于 2012-5-9 23:27:52 |显示全部楼层
俺印象中这是一个古老的话题,被重复发明了很多次的old wheel呢。

http://bbs.blueidea.com/forum.php?mod=viewthread&tid=2440594
hutia 楼主

诘屈聱牙

荣誉管理

帖子
5803
体力
23580
威望
367
居住地
江苏省 苏州市
发表于 2012-5-9 23:58:50 |显示全部楼层
bound0 发表于 2012-5-9 23:27
俺印象中这是一个古老的话题,被重复发明了很多次的old wheel呢。

http://bbs.blueidea.com/forum.php?m ...

你还找的到这一篇啊。我是记得很多年前讨论过这个问题,可是懒得去找了,呵呵
您需要登录后才可以回帖 登录 | 注册


Archiver|手机版|blueidea.com ( 京ICP备05002321号 )    

GMT+8, 2012-5-29 22:53 , Processed in 0.109993 second(s), 7 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部