我正在創建一個需要能夠上傳大文件的應用程序。我選擇使用FormData對象,因爲我可以向用戶報告進度。使用Zend Framework或Javascript進行瀏覽器檢測
毫不奇怪,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?減少對服務器的呼叫。
任何幫助,非常感謝。
SOLUTION:
我已決定使用YepNope:
yepnope({
test : "FormData" in window,
yep : 'normal.js',
nope : 'flashupload.js'
});
不要瀏覽器檢測,功能檢測! http://modernizr.com/ –
我認爲你應該檢查客戶端,瀏覽器是否支持所需的功能,而不是瀏覽器是否是。 – goat
好的,如果我檢查客戶端,那麼我該如何優雅地下載所需的JS?有了功能檢測,我必須下載一切,不是嗎? – beingalex