function executeScript(html) 

var reg = /<script[^>]*>([^\x00]+)$/i; 
//对整段HTML片段按<\/script>拆分 
var htmlBlock = html.split("<\/script>"); 
for (var i in htmlBlock) 

var blocks;//匹配正则表达式的内容数组,blocks[1]就是真正的一段脚本内容,因为前面reg定义我们用了括号进行了捕获分组 
if (blocks = htmlBlock[i].match(reg)) 

//清除可能存在的注释标记,对于注释结尾-->可以忽略处理,eval一样能正常工作 
var code = blocks[1].replace(/<!--/, ''); 
try 

eval(code) //执行脚本 

catch (e) 





上面函数作用:将Ajax返回的HTML代码中的JavaScript脚本提取出来,然后运行,也就是运行ajax返回的JS代码,主要是针对Firefox浏览器,调试过可以正常运行,但运行完会报一个错误:htmlBlock[i].match is not a function
[Break on this error] if (blocks = htmlBlock[i].match(reg)) 不知道该怎么修改了

解决方案 »

  1.   

    报的错误信息:htmlBlock[i].match is not a function
      

  2.   

    blocks = html.match(/[^>]+(?=<\/script>)/gi)Examples:var html = "<script type=text\/javascript>alert('唐伯虎')<\/script><div>dfewdfe</div><script>alert('点秋香')<\/script>";eval(html.match(/[^>]+(?=<\/script>)/gi)[0]);eval(html.match(/[^>]+(?=<\/script>)/gi)[1]);
      

  3.   


    function executeScript(html) 

    var reg = /<script[^>]*>([^\x00]+)$/i; 
    //对整段HTML片段按<\/script>拆分 
    var htmlBlock = html.split("<\/script>"); 
    for (var i in htmlBlock) 

    var blocks;//匹配正则表达式的内容数组,blocks[1]就是真正的一段脚本内容,因为前面reg定义我们用了括号进行了捕获分组 
    if (blocks = i.match(reg)) //这里的foreach循环 i 是序号么?我感觉i 就是htmlBlock中的元素了 

    //清除可能存在的注释标记,对于注释结尾-->可以忽略处理,eval一样能正常工作 
    var code = blocks[1].replace(/<!--/, ''); 
    try 

    eval(code) //执行脚本 

    catch (e) 




      

  4.   

    Method:String.prototype.exeScript = function() {
           var arr = this.match(/[^>]+(?=<\/script>)/gi);
           for (var i=0; arr[i]; i++) eval(arr[i]);
    }Examples:<script type=text/javascript>String.prototype.exeScript = function() {
           var arr = this.match(/[^>]+(?=<\/script>)/gi);
           for (var i=0; arr[i]; i++) eval(arr[i]);
    }var html = "<script type=text\/javascript>alert('唐伯虎')<\/script><div>dfewdfe</div><script>alert('点秋香')<\/script>"html.exeScript();</script>
      

  5.   


    String.prototype.exeScript = function() {
           var arr = this.match(/[^>]+(?=<\/script>)/gi) || [];
           for (var i=0; arr[i]; i++) eval(arr[i]);
    }
      

  6.   


    Prototyper兄方法完全正确,但我想改成function形式,不知道这样改动后有没有什么影响,比如执行效率方面function exeScript(html) {
           var arr = html.match(/[^>]+(?=<\/script>)/gi) || [];
           for (var i=0; arr[i]; i++) eval(arr[i]);
    }调用方法:exeScript(html);