我正在创建一个需要能够上传大文件的应用程序。我选择使用FormData对象,因为使用它我可以向用户报告进度。
毫不奇怪 IE 不支持这一点,所以我不得不回退到 Flash。使用 Zend Framework 检测 IE 7/8/9+ 的最佳方法是什么?我正在通过每个控制器中的 indexAction 方法根据需要加载其他资产。例如:
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
工作):
public function indexAction()
{
$u_agent = $_SERVER['HTTP_USER_AGENT'];
$this->view->stepnumber = 5;
$this->view->stepintro = 'Select your cut out detail.';
if(preg_match('/MSIE/i', $u_agent)) {
$this->view->headScript()->appendFile($this->view->baseUrl().'/assets/js/excanvas.js');
} else {
$this->view->headScript()->appendFile($this->view->baseUrl().'/assets/js/mootools/mootools-canvas-lib/mcl-min.js');
}
$this->view->headScript()->appendFile($this->view->baseUrl().'/assets/js/frank/pentool.js');
$image = $this->uploadsDb->getImage();
$data = $this->nodedataDb->getNodedata($image->id);
$this->view->image = $image;
$this->view->nodeData = $data;
}
不过,我不太喜欢这种方法,我宁愿使用 Javascript 进行检查,因为这将更具前瞻性(我认为)。但是我将如何在我的 ZF layout.phtml 中使用 Javasript,所以我只加载我需要的 Javascript?减少对服务器的调用。
任何帮助深表感谢。
解决方案:
我决定使用 YepNope:
yepnope({
test : "FormData" in window,
yep : 'normal.js',
nope : 'flashupload.js'
});