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