0

プロジェクトには Yii を使用しています。ヘッダーに 2 つの JS スクリプト/アセットを条件付きで登録しようとしています。1 つは IE8 用で、もう 1 つは他のブラウザー用<!--[if lte IE 8]>です。

ただし、私がよく知っているのは and だけでYii::app()->clientScript->registerScriptFileありYii::app()->clientScript->registerScript、登録されたスクリプトを条件付きコメントで囲む方法を公開しているものはありません。

echoコントローラーアクションの開始時に直接実行してみました:

echo '<!--[if lte IE 8]><script src="'.$assetsPath . '/charts/r2d3.js'.'" charset="utf-8"></script><![endif]-->';

ただし、ソースを見ると、スクリプトはドキュメントの上部 (の前<html>) に表示されます。できれば、で表示したい<head>です。

4

3 に答える 3

1

これを次のように頭に設定できます。

->views->layouts->main.php に移動します

後で必要なコンテンツを簡単に追加できます。

すなわち

<!DOCTYPE html>
[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]
[if IE 7]><html class="no-js lt-ie9 lt-ie8"> <![endif]
[if IE 8]><html class="no-js lt-ie9"> <![endif]
[if gt IE 8]><html class="no-js"> <![endif]
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>

または、ブラウザーのバージョンを確認する必要がある場合は、コントローラーでスクリプトを追加します。この方法も機能します。

これをコントローラーで定義し、

public function beforeRender( $view ) {
//condition to check the browser type and version
if($browser = 'ie' && $version = '8') {
    Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
    return true;
}
}

// 2 番目のオプションはテストしていません。しかし、動作するはずです。

次のいずれかでブラウザの種類とバージョンを確認できます。

<?php
echo $_SERVER['HTTP_USER_AGENT'];

$browser = get_browser(null, true);
print_r($browser);
?>

このリンクを確認してください、http://php.net/manual/en/function.get-browser.php#101125

于 2013-12-13T10:55:25.390 に答える
1

次の拡張機能を使用できます

http://www.yiiframework.com/extension/ewebbrowser/

ファイルをコンポーネントに入れました。次に、コードで実行します

$b = new EWebBrowser();
if($b->platform == "Internet Explorer" && $b->version == "8.0") {//you could explode version at the . I guess, however not sure if there is even a version 8.x or whatever
    Yii::app()->clientScript->registerScriptFile("path/to/script");
} else {
    Yii::app()->clientScript->registerScriptFile("path/to/otherscript");
}

現在の IE、Firefox、および Chrome ブラウザでこれをテストしました。これがこれらのブラウザーの他のバージョンで動作するかどうかは保証できません。2年経ちますが、まだまだ使えそうです。

于 2013-12-13T11:06:20.360 に答える
0

これは最適な方法ではありませんが、次のコードを使用して目標を達成できます。

特定のControllerに対して上記の条件文が必要な場合は、次のようにします。

あなたの下で layouts/main.php

<?php if (Yii::app()->getController()->getId() == 'Your Controller Name'): ?>
<!--[if lt IE 8]>
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/ie.css" media="screen, projection" />
<![endif]-->
<?php endif; ?>

特定のControllerのActionに対して上記の条件文が必要な場合は、次のようにします。

あなたの下で layouts/main.php

<?php if (Yii::app()->getController()->getId() == 'Your Controller Name' && Yii::app()->getController()->getAction()->getId() == 'Your Action Name'): ?>
<!--[if lt IE 8]>
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/ie.css" media="screen, projection" />
<![endif]-->
<?php endif; ?>
于 2013-12-13T11:21:54.177 に答える