我有一个页面,我想为不同的浏览器加载不同的模板文件。
示例:
如果浏览器 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”}是一个智能标记,用于模板自定义文件。
答案 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;