Php 使用Zend Framework或Javascript进行浏览器检测

Php 使用Zend Framework或Javascript进行浏览器检测,php,javascript,zend-framework,mootools,cross-browser,Php,Javascript,Zend Framework,Mootools,Cross Browser,我正在创建一个需要能够上传大文件的应用程序。我已经选择使用该对象,因为使用它我可以向用户报告进度 毫不奇怪IE不支持这一点,所以我不得不回到Flash。使用Zend Framework检测IE 7/8/9+的最佳方法是什么?我根据需要通过每个控制器中的索引方法加载其他资产。例如: public function indexAction() { $this->view->stepnumber = 1; $this->view->stepintro = 'Up

我正在创建一个需要能够上传大文件的应用程序。我已经选择使用该对象,因为使用它我可以向用户报告进度

毫不奇怪IE不支持这一点,所以我不得不回到Flash。使用Zend Framework检测IE 7/8/9+的最佳方法是什么?我根据需要通过每个控制器中的索引方法加载其他资产。例如:

public function indexAction()
{
    $this->view->stepnumber = 1;
    $this->view->stepintro = 'Upload your photo.';
    $this->view->headScript()->appendFile($this->view->baseUrl().'/assets/js/fileuploader.js');
}
现在,在我的一个页面中,我已经完成了某种形式的浏览器检测(对于一些
canvas
工作):

虽然我对这种方法不太感兴趣,但我更愿意检查使用Javascript,因为它更适合未来(我认为)。但是我如何在我的ZF layout.phtml中使用Javasript,以便只加载我需要的Javascript呢?减少对服务器的调用

非常感谢您的帮助

解决方案:

我已决定使用YepNope:

yepnope({  
  test : "FormData" in window,
  yep  : 'normal.js',  
  nope : 'flashupload.js'  
});   

如果您正在寻找为仅IE浏览器附加css样式表/javascript文件的简单方法,则可以使用条件注释参数,如下所示:

对于css样式表以外的任何文件:

$this->view->headLink()->appendFile($this->view->baseUrl() . '/media/js/core.js', 'text/javascript', array('conditional' => 'IE');
注意
数组('conditional'=>'IE')
参数

对于附加样式表文件,函数参数略有不同:

$this->view->headLink()->appendStylesheet($this->view->baseUrl() . '/media/css/core.css', 'all', 'IE');

如果您正在寻找一种简单的方法为仅IE浏览器附加css样式表/javascript文件,您可以使用条件注释参数,如下所示:

对于css样式表以外的任何文件:

$this->view->headLink()->appendFile($this->view->baseUrl() . '/media/js/core.js', 'text/javascript', array('conditional' => 'IE');
注意
数组('conditional'=>'IE')
参数

对于附加样式表文件,函数参数略有不同:

$this->view->headLink()->appendStylesheet($this->view->baseUrl() . '/media/css/core.css', 'all', 'IE');

如果该功能不可用,您可以添加javascript(我使用jquery作为简短语法)

if(featureA的类型==“未定义”){
$(“”)。属性({
“src”:“/assets/featurea.js”,
“类型”:“文本/javascript”
})。附录($(“总目”)。等式(0);
}

您可以将其用于其他功能,这样就不必全部下载。

如果该功能不可用,您可以添加javascript(我使用jquery作为简短语法)

if(featureA的类型==“未定义”){
$(“”)。属性({
“src”:“/assets/featurea.js”,
“类型”:“文本/javascript”
})。附录($(“总目”)。等式(0);
}

您可以将其用于其他功能,这样就不必全部下载。

不进行浏览器检测,功能检测!我认为你应该检查客户端浏览器是否支持所需的功能,而不是浏览器是否支持ie。好吧,如果我检查客户端,那么我如何优雅地只下载所需的JS?使用功能检测,我必须下载所有内容,否?Modernizr不检查FormData是否可以将YepNope与Modernizr一起使用以执行其他检查?浏览器不检测,功能检测!我认为你应该检查客户端浏览器是否支持所需的功能,而不是浏览器是否支持ie。好吧,如果我检查客户端,那么我如何优雅地只下载所需的JS?对于功能检测,我必须下载所有内容,不是吗?Modernizr不检查FormData,你不能使用YepNope和Modernizr来执行其他检查吗?太好了:)我不知道,但决定采用功能检测路线。太好了:)我不知道,但决定采用功能检测路线。