2012-05-03 53 views
2

我正在創建一個需要能夠上傳大文件的應用程序。我選擇使用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' 
}); 
+2

不要瀏覽器檢測,功能檢測! http://modernizr.com/ –

+0

我認爲你應該檢查客戶端,瀏覽器是否支持所需的功能,而不是瀏覽器是否是。 – goat

+0

好的,如果我檢查客戶端,那麼我該如何優雅地下載所需的JS?有了功能檢測,我必須下載一切,不是嗎? – beingalex

回答

2

,如果你正在尋找一種簡單的方法來添加CSS樣式表/ JavaScript文件的IE瀏覽器只,您可以使用條件註釋的說法,因爲這樣的:

對於任何文件,除了CSS樣式表:

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

請注意array('conditional' => 'IE')參數。

對於附加樣式表文件,函數的參數有一點不同:

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

http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.headstyle

+0

太棒了:)從來不知道,但已決定採取特徵檢測路線。 – beingalex

+0

不錯的鏈接...不要忘記其他參數:D – decebal

-2

您可以添加一個JavaScript的情況下,該功能不可用(我用了很短的語法的jQuery) ;

if(typeof featureA == "undefined"){ 
    $("<script/>").attr({ 
     "src" : "/assets/featurea.js", 
     "type": "text/javascript" 
    }).appendTo($("head").eq(0)); 
} 

你可以使用其他功能相同,所以你不必download'em所有。