日期:2014-05-16  浏览次数:20362 次

DWR动态执行javascript

一直在用dwr处理页面的局部更新,在调用action返回的data中存在有javascript代码

执行时javascript代码会不起作用。

DWRUtil.setValue("showdata", data, {escapeHtml:false});

?其中showdata为DIV的ID,DATA为要放入的数据,如何处理呢?查看了下DWR的util.js文件有这个一个函数dwr.util.setValue,函数的最后一行

ele.innerHTML = val;

?这里的ele即为showdata,val即为Data,这样的javascript是不被执行的。虽然说ie中有defer属性,可以使新添加的javascript起作用,但在其它浏览器中是不行的,

如何解决呢,为了适应多浏览器,需要将val中javascript代码分离出来,动态加载到页的head区域,浏览器将会识别你加入的javascript,代码如下:

?

ele.innerHTML = val;
var reg = /<script[^>]*>([\s\S]*)<\/script>/ ; 
var match = val.match(reg);
    if (match!=null && match.length>0)
	{
    	var MyScript = match[1];
    	var script=document.createElement("script");//创建新的<script>标签
        script.text=MyScript;//给新的script标签赋值
    	document.body.appendChild(script); //在header中添加也行    
    	
	}

ok,可以了,就这样。

注意,那个正则表达式只适用于data中包含一个"<script></script>"的,多个?不管用,自己想办法吧:)