在页面上动态添加JavaScript代码【跨浏览器】

最近一个项目中需要使用MDI,且所有的页面需要动态配置。实现方式是将页面配置成XML,当用户提交请求时系统会合并XML和数据库的配置,Ajax返回客户端由客户端解析生成页面。其中一个实现是将配置在XML的JavaScript内容动态添加到页面模块中,以下为代码实现

1. XML中定义JavaScript内容


<Content><![CDATA[
//auto Fill From
function autoFillFrom(obj){
if($(obj).val() == ""){
$(obj).val($(obj).attr('defaultVal'));
}
}
//auto Fill To
function autoFillTo(obj,objFrom){
if($(objFrom).val() == $(objFrom).attr('defaultVal')){
if($(obj).val() == ""){
$(obj).val($(obj).attr('defaultVal'));
}
}else if($(obj).val() == ""){
$(obj).val($(objFrom).val());
}
}
]]></Content>


2. 当用户发送请求时动态将XML和数据库内容合并并输出到页面,采用Freemarker模块。关联动态Script的代码是:


<#assign result=result.objectToReturn>
<#if result.head??>
<div componentType="head" style="display:none;">
<pre>
${result.head.content}
</pre>
</div>
</#if>


添加<pre>标签是因为在页面解析时会过滤掉代码中的格式,若是有注释的话就会出错了。


生成到客户端的页面代码为:


<div style="display: none;" componenttype="head">
<pre>
//auto Fill From
function autoFillFrom(obj){
if($(obj).val() == ""){
$(obj).val($(obj).attr('defaultVal'));
}
}
//auto Fill To
function autoFillTo(obj,objFrom){
if($(objFrom).val() == $(objFrom).attr('defaultVal')){
if($(obj).val() == ""){
$(obj).val($(obj).attr('defaultVal'));
}
}else if($(obj).val() == ""){
$(obj).val($(objFrom).val());
}
}
</pre>
</div>


3.客户端根据返回值动态添加JavaScript内容到Head区域


function JSHeader(header, module) {
var jsContent = header.children('pre').text();
if (jsContent) {
var html_doc = document.getElementsByTagName('head')[0];
js = document.createElement('script');
js.setAttribute('type', 'text/javascript');
//js.innerHTML = jsContent;此句在FF下正常,IE7下通不过
js.text = jsContent;
html_doc.appendChild(js);
}
}


其中header参数为模板中componentType="head"的DIV,module是对应的MDI窗口(根据需要添加)

这样,在页面上就可以调用动态添加的JavaScript方法了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值