Template Toolkit浏览器检测

时间:2013-01-22 22:23:56

标签: perl template-toolkit

有没有办法通过模板工具包检测您正在使用的浏览器?例如,我可以使用jQuery实现我想做的事情,但是如果可能的话,知道如何在模板工具箱中做到这一点会很有用吗?

Jquery的

    <script>
    jQuery(window).load(function(){
        if ( (jQuery.browser.msie && jQuery.browser.version < 9.0) )
        {
            jQuery('body').addClass('old-ie');
        }
    });
    </script>

在模板工具箱中,我想做类似下面的事情,但在文档中无法看到这个?

    <body 
    [% IF browser.msie && browser.version < 9.0 %]
    class="old-ie"
    [% ELSE %]
    [% END %]
    >

2 个答案:

答案 0 :(得分:4)

您可以通过HTTP请求标头执行此操作。您没有提到调用TT的内容,但是如果您使用的是Catalyst,则可以使用Catalyst::TraitFor::Request::BrowserDetect,然后将变量传递给TT以说明请求该页面的浏览器类型。

答案 1 :(得分:4)

我不知道有关于此的TT插件,但在后端应用程序中添加一行或两行以使信息可用于模板是微不足道的。例如,如果您的应用程序是基于Catalyst的,您可以在主程序中添加以下内容:

__PACKAGE__->apply_request_class_roles(qw/
    Catalyst::TraitFor::Request::BrowserDetect
/);

...并在“自动”处理程序中引入一行,例如(未经测试):

$c->stash(browser => $c->req->browser);

...或者只是使用它是你的模板:

[%- SET browser = c.req.browser;
    SET old_ie = 'class="old-ie"'
        IF browser.windows && browser.ie && browser.public_major < 9.0;
-%]

然后在模板中的任何位置加入old_ie

有关详细信息和选项,请参阅Catalyst::TraitFor::Request::BrowserDetectHTTP::BrowserDetect。我确信有类似的插件/方法适用于Dancer,Mojolicious等。