1

有没有办法通过模板工具包检测您正在使用的浏览器?例如,我可以使用 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 %]
    >
4

2 回答 2

4

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

于 2013-01-22T22:46:26.667 回答
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 等也有类似的插件/方法。

于 2013-01-22T23:04:42.150 回答