找回密码
 注册

只需一步,快速开始

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

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

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

查看: 209|回复: 18

求助:javascript Http请求的结果中有<script>块,怎么让它跑起来? [复制链接]

CHancarDong 楼主
帖子
26
体力
71
威望
0
发表于 2012-5-4 17:10:38 |显示全部楼层
另外一个问题,也是关于javascript的。就是如果一个url返回的req.responseText内容是:
<div>
<script>
alert("hello world!");
</script>
</div>

我们怎么样让这段插入网页的代码可以运行呢?因为现在我是用innerHTML插入, 内容是插入了,但是里面的<script>块并不运行。

我在网上搜到一个<跨浏览器的设置innerHTML方法>的文章,但是是2006年的文章,而且他的方法我试了,在chrome下不管用。

有谁知道使用于chrome或者safari的方法么?不用innerHTML也可以,只有最后可以运行插入的script代码就行!!!谢谢!!

javascript交流加QQ:3963726
帖子
36
体力
14
威望
0
发表于 2012-5-4 19:02:35 |显示全部楼层
转义符,试试看哦
站长工具
CHancarDong 楼主
帖子
26
体力
71
威望
0
发表于 2012-5-4 19:42:03 |显示全部楼层
顶啊。强人们都去哪了?
帖子
364
体力
971
威望
0
居住地
辽宁省 沈阳市
发表于 2012-5-4 20:07:09 |显示全部楼层
本帖最后由 wsph123 于 2012-5-4 20:08 编辑
  1. eval(xhr.responseText.split('<script>')[1].split('<\/script>')[0]);
复制代码

逝去de繁华

中级会员  

帖子
285
体力
449
威望
0
居住地
广东省 深圳市
发表于 2012-5-4 20:18:49 |显示全部楼层
本帖最后由 x269147836 于 2012-5-4 20:19 编辑

 提示:您可以先修改部分代码再运行


不知道是不是你想要的~
据说除sf3.0之前的版本,其他浏览器都支持~
假如再也碰不见你,祝早、午、晚都安!
CHancarDong 楼主
帖子
26
体力
71
威望
0
发表于 2012-5-4 20:24:31 |显示全部楼层
wsph123 发表于 2012-5-4 20:07

多谢~~~但是我代码里还有不是script的部分需要写进网页
帖子
364
体力
971
威望
0
居住地
辽宁省 沈阳市
发表于 2012-5-4 20:31:39 |显示全部楼层
CHancarDong 发表于 2012-5-4 20:24
多谢~~~但是我代码里还有不是script的部分需要写进网页

那部分直接写就行了, script的内容也不会运行
CHancarDong 楼主
帖子
26
体力
71
威望
0
发表于 2012-5-4 20:56:09 |显示全部楼层
wsph123 发表于 2012-5-4 20:07

会不会我把这些script的内容取出来,然后自己建新的script element, document.creatElement("script"),然后把代码加进去会好一些 ? 这样可以控制一些网页内容的位置
CHancarDong 楼主
帖子
26
体力
71
威望
0
发表于 2012-5-4 21:01:01 |显示全部楼层
或者我可以先把代码都写进一个div, 然后用var scode = div.getElementByTagName("script")取到script的内容,会不会比直接操作字符串简单.
然后用eval(scode.innerHTML)运行 ?
帖子
364
体力
971
威望
0
居住地
辽宁省 沈阳市
发表于 2012-5-4 21:03:43 |显示全部楼层
CHancarDong 发表于 2012-5-4 21:01
或者我可以先把代码都写进一个div, 然后用var scode = div.getElementByTagName("script")取到script的内容 ...

CHancarDong 楼主
帖子
26
体力
71
威望
0
发表于 2012-5-4 21:08:43 |显示全部楼层
wsph123 发表于 2012-5-4 21:03
为啥要弄的这么复杂 直接eval就足够了

用div.getElementByTagName("script")取script内容应该比较方便吧

另外如果script代码里面有document.write或者有类似
var scripts = document.getElementsByTagName("script");
var script = scripts[scripts.length - 1];
之类取位置的代码的话,不会把网页结构打乱么?
CHancarDong 楼主
帖子
26
体力
71
威望
0
发表于 2012-5-4 21:20:50 |显示全部楼层
我有一个很恶心的例子,这个是返回的结果,声明这个结果我没办法改
  1. <script>
  2. (function() {
  3.   
  4.     var u = "test.js";
  5.     document.write('<script src="'+u+'"></scr'+'ipt>');
  6. })();
  7. </script>
复制代码
用eval了以后运行了,但是他又用document.write写了一段script, 这段又不运行了,难道要我不停的检测下去 ?
CHancarDong 楼主
帖子
26
体力
71
威望
0
发表于 2012-5-4 21:29:13 |显示全部楼层
或者结果是这种情况的话,如果我用异步请求,并且网页后面还有javascript代码的话.
  1. <script>
  2. (function() {
  3. var scripts = document.getElementsByTagName("script");
  4. var script = scripts[scripts.length - 1];  
  5. var req = document.createElement("script");

  6. req.src = "test.js";
  7.             me.parentNode.insertBefore(req, me.nextSibling);

  8. })();
  9. </script>
复制代码
这段代码新建的script就不会写在这段代码在的那个div里。而是会加到后面的地方。该怎么解决呢?
CHancarDong 楼主
帖子
26
体力
71
威望
0
发表于 2012-5-4 22:31:01 |显示全部楼层
如果结果是
  1. <script src = test.js>
  2. </script>
复制代码
用eval根本没办法运行啊
帖子
364
体力
971
威望
0
居住地
辽宁省 沈阳市
发表于 2012-5-4 22:57:47 |显示全部楼层
CHancarDong 发表于 2012-5-4 22:31
如果结果是用eval根本没办法运行啊
  1. var json=function(i){if($('g_cse'))$('g_cse').parentNode.removeChild($('g_cse'));var s=document.createElement('script');s.id='g_cse';s.src=i;c(document,'head')[0].appendChild(s);};

  2. json(xhr.responseText.split('<script src="')[1].split('"><\/script>')[0]);
复制代码

补充内容 (2012-5-4 23:03):

 提示:您可以先修改部分代码再运行

帖子
364
体力
971
威望
0
居住地
辽宁省 沈阳市
发表于 2012-5-4 22:59:27 |显示全部楼层
CHancarDong 发表于 2012-5-4 21:20
我有一个很恶心的例子,这个是返回的结果,声明这个结果我没办法改用eval了以后运行了,但是他又用document.w ...

这么实现的智商绝对硬,虽然他的code是固定的、但你人是活的
帖子
278
体力
489
威望
0
发表于 2012-5-8 14:05:17 |显示全部楼层
用正则找到你的js代码,然后运行它
CHancarDong 楼主
帖子
26
体力
71
威望
0
发表于 2012-5-9 18:40:34 |显示全部楼层
解决了,用eval在script代码块里代码很多的时候出错了,具体为什么我也没仔细研究,因为那个script代码根本没办法读。但是我用这个方法解决了。
  1. function setInnerHTML(elem, htmlCode){     
  2.         elem.innerHTML += htmlCode;
  3.         var e  = document.createElement("div");
  4.         e.innerHTML = htmlCode;
  5.         var scripts = e.getElementsByTagName("script");
  6.         for (var i = 0; i < scripts.length; i++) {
  7.                 var eScript = document.createElement("script");
  8.                 eScript.id = "woadd";
  9.                 if(scripts[i].src){
  10.                         eScript.src = scripts[i].src;
  11.                        
  12.                 }else{
  13.                         eScript.innerHTML = scripts[i].innerHTML;
  14.                         //var scrcode = scripts[i].innerHTML;
  15.                         //eval(scrcode);
  16.                 }
  17.                 document.head.appendChild(eScript);
  18.         }
  19. }
复制代码
帖子
364
体力
971
威望
0
居住地
辽宁省 沈阳市
发表于 2012-5-9 20:43:30 来自手机 |显示全部楼层
....这个不就是我给你的那个code给复杂化了么………
您需要登录后才可以回帖 登录 | 注册


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

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

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部