zhou20041110 2010-01-21 11:42
浏览 540
已采纳

请教ajax嵌入页面JS失效的问题。

我用ajax把一个jsp页面嵌入到另一个jsp页面的DIV中,其它一切都正常,但嵌入页面的JS都失效了,我嵌入的时候用得是document.getElementById(idName).innerHTML=msg,msg是ajax返回的页面信息,请问这是为什么?有人说DIV中的js都会失效,但我测试了一下,还是有用啊。请问这个问题该如何解决?谢谢了。
  • 写回答

5条回答 默认 最新

  • mginobili 2010-01-21 13:04
    关注

    [quote]很多人都可能遇到过这种情况:设置 innerHTML 的时候,插入的 HTML 代码中包含脚本,但这些脚本却不生效,或者在 IE 上生效在其它浏览器上就不生效。原因很简单:不同浏览器对插入 innerHTML 中的脚本有不同的处理方法。经过实践,归纳如下:
    对于IE,首先 script 标签必须带 defer 属性,其次在插入时刻,innerHTML 的所属节点必须在 DOM 树中;对于 Firefox 和 Opera,在插入时刻,innerHTML 的所属节点不可以在 DOM 树中。
    根据上面结论,给出通用的设置 innerHTML 方法:
    [code="js"]/*

    • 描述:跨浏览器的设置 innerHTML 方法
    • 允许插入的 HTML 代码中包含 script 和 style
    • 作者:kenxu ken@ajaxwing.com
    • 日期:2006-03-23
    • 参数:
    • el: 合法的 DOM 树中的节点
    • htmlCode: 合法的 HTML 代码
    • 经测试的浏览器:ie5+, firefox1.5+, opera8.5+ / var setInnerHTML = function (el, htmlCode) { var ua = navigator.userAgent.toLowerCase(); if (ua.indexOf('msie') >= 0 && ua.indexOf('opera') < 0) { htmlCode = '
      for IE
      ' + htmlCode; htmlCode = htmlCode.replace(/]</em>)&gt;/gi, &#39;<script$1 defer="true">&#39;); el.innerHTML = htmlCode; el.removeChild(el.firstChild); } else { var el_next = el.nextSibling; var el_parent = el.parentNode; el_parent.removeChild(el); el.innerHTML = htmlCode; if (el_next) { el_parent.insertBefore(el, el_next) } else { el_parent.appendChild(el); } } }[/code][/quote]</li> </ul>
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘