WZBLOG-惜梦博客-专注web编程的个人博客 WZBLOG-惜梦博客-专注web编程的个人博客

执行ajax加载页面中的js方法

in HTML5/JavaScript read (594) 文章转载请注明来源!

原因

博主在写后台的时候,不想使用iFrame,所以使用了ajax加载页面,通过ajax加载该页面后无法执行其中的js。

解决思路

正则匹配出加载页面中的所有js,为这些js创建同样多个<script>标签,把js内容插入即可执行。但使用中发现,Chrom可行,IE不行。

解决方案

代码如下:

// 第一步:匹配加载的页面中是否含有js

var regDetectJs = /<script(.|\n)*?>(.|\n|\r\n)*?<\/script>/ig;
var jsContained = ajaxLoadedData.match(regDetectJs);

// 第二步:如果包含js,则一段一段的取出js再加载执行
if(jsContained) {
    // 分段取出js正则
    var regGetJS = /<script(.|\n)*?>((.|\n|\r\n)*)?<\/script>/im;

    // 按顺序分段执行js
    var jsNums = jsContained.length;
    for (var i=0; i<jsNums; i++) {
        var jsSection = jsContained[i].match(regGetJS);

        if(jsSection[2]) {
            if(window.execScript) {
                // 给IE的特殊待遇
                window.execScript(jsSection[2]);
            } else {
                // 给其他大部分浏览器用的
                window.eval(jsSection[2]);
            }
        }
    }
}

// 本段代码转载于 大魔 I'm Png
解说下:window.execScript就IE认,其他浏览器需要用eval啦。
至此,算比较完美的解决。

更多解决方法:

解决思路有很多,博主只列举一个,更多方法请看 http://www.impng.com/web-dev/execscript-loaded-by-ajax.html (博主有点懒,没有自己写文章了,直接吧这位大兄弟的文章转来的,更多方法请访问 前面的网址)

本文基于《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
文章链接:https://blog.wz52.cn/archives/24.html (转载时请注明本文出处及文章链接)

Ajax
发表新评论
PREVIOUS NEXT
雷姆
拉姆