2012-05-03 17 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

あなたはIEのみのブラウザのCSSスタイルシート/ JavaScriptファイルを追加する簡単な方法を探しているなら、あなたが使用することができますCSSスタイルシート以外の任意のファイルについては

$this->view->headLink()->appendFile($this->view->baseUrl() . '/media/js/core.js', 'text/javascript', array('conditional' => 'IE'); 
などの条件付きコメント引数、 10

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)); 
} 

他の機能にも同じ機能を使用できますので、ダウンロードする必要はありません。

関連する問題