0

我们在项目中使用 Yii。我正在尝试在标头中有条件地注册两个 JS 脚本/资产:一个用于 IE8,另一个用于其他浏览器 - 使用条件注释(例如<!--[if lte IE 8]>)。

但是,我只熟悉Yii::app()->clientScript->registerScriptFileand 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

您可以在 head 中设置如下,

转到->视图->布局->main.php

只需添加您需要的任何内容,

IE

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

// 没有测试第二个选项。但应该工作。

您可以使用以下任何方式检查浏览器类型和版本,

<?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 浏览器对此进行了测试。我不能确保这适用于这些浏览器的其他版本。两年了,但它似乎仍然有效。

于 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 回答