为不同的浏览器加载不同的模板文件

时间:2010-07-01 06:05:12

标签: javascript jquery

我有一个页面,我想为不同的浏览器加载不同的模板文件

示例:

如果浏览器 IE ,则加载 1.tpl

&安培;如果浏览器不是IE加载 2.tpl

[此处.tpl是具有相应内容&的模板文件。 css]

我尝试使用条件标签:

<!--[if IE]>
{include file="/templates/1.tpl"}       
<![endif]-->

<!--[if !IE]>-->
{include file="/templates/2.tpl"}   
<!--<![endif]-->

使用这些条件标签其他浏览器工作正常。但IE仍然从两个.tpl文件中获取内容,从而导致页面混乱。

所以我这样做技巧 ......

<!--[if IE]>
{include file="/templates/1.tpl"}  
<![endif]-->

<div id="container">
{include file="/templates/2.tpl"}  
</div>

<script type="text/javascript">
var IE = /*@cc_on!@*/false;
if(IE){
   $("#container").css("display","none");
}
 </script>

前端,这显示了我需要的内容,

但是在后端 IE仍然需要处理内容&amp; both.tpl的css然后隐藏其中一个。

这会导致加载时间重&# Javascript 冲突

我知道这些是我玩过的脏戏

有没有更好的方式来做这件事?

感谢。

编辑:

{include file =“/ templates / 2.tpl”}是一个智能标记,用于模板自定义文件。

2 个答案:

答案 0 :(得分:3)

您的“非IE”条件评论不正确(reference)。尝试:

<!--[if IE]>
{include file="/templates/1.tpl"}       
<![endif]-->

<![if !IE]>
{include file="/templates/2.tpl"}   
<![endif]>

请注意,“not”版本不是使用!--表单。

但正如大卫所说,更好的方法是使用一个符合标准的模板,只需要对IE的极端点头......怪癖,如有必要,还可以包含一个额外的模板,增加一些额外的模板IE的代码。这不仅仅是因为自从smarty标签被服务器端替换后,您总是会将两个模板发送到所有浏览器,只是其中一个被注释掉了,这看起来很浪费...... / p>

答案 1 :(得分:0)

或者你可以使用javascript。

function dynamicStyle(){

var ie_href = "ie-style.css"
var other_href = "other-style.css";

var style = document.createElement('link');
style.setAttribute('rel', 'stylesheet');

    if(navigator.appCodeName == 'Microsoft Internet Explorer'){
        style.setAttribute('href', ie_href);    
    }

    else{
        style.setAttribute('href', other_href); 
    }

document.getElementsByTagName('head')[0].appendChild(style);  
}

window.onload = dynamicStyle;