我有几个页面在Mozilla和Chrome中运行良好,但在IE8中运行不好。有了responsd.js,大多数问题都解决了。然而,当有参数传递到页面时,问题就会出现(页面以移动模式显示;占用整个页面宽度,导航栏折叠为图标栏)。但这种情况仅在编辑模式下发生(id作为参数传递)。
例如,我有一个用户注册页面,它可以在两种模式下工作(新建和更新)。对于更新,它使用相同的视图,并附上用户详细信息
这是两条路线。第一个用于新模式,第二个用于编辑模式。
Route::get('test', function() {
return View::make('test');
});
Route::get('test/1', function() {
return View::make('test');
});
这是测试页。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Main Layout">
<link rel="stylesheet" href={ { asset( "/css/bootstrap.min.css") }} />
<script src="/js/jquery-1.11.1.js"></script>
<!--[if lt IE 9]>
<script src="js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="wrap col-md-13">
<!-- Wrap all page content here -->
<nav>
<div class="col-md-12">
<div class="nav navbar" style="background-color:black;">
<div class="navbar-header pull-left">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar" style="background-color:red;"></span>
<span class="icon-bar" style="background-color:red;"></span>
<span class="icon-bar" style="background-color:red;"></span>
</button>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav pull-right">
<li class="stft-menu-item"><a href="/">Home</a>
</li>
<li class="stft-menu-item"><a href="/">About</a>
</li>
<li class="stft-menu-item"><a href="/">Contact</a>
</li>
</ul>
</div>
</div>
</div>
</nav>
</div>
</body>
<script src="/js/bootstrap.min.js"></script>
</html>
现在,当我在新模式下使用第一条路由进行测试时,一切都很好。
http://localhost/test
但问题出现在以下方面。
http://localhost/test/1
有什么意见吗?
<!--[if lt IE 9]>
<script src="js/respond.min.js"></script>
<![endif]-->
这需要更改为/js/respond.min.js
(注意前导斜杠)。目前,当您查看http://localhost/test/1
URL时,该文件引用将不起作用。或者,您也可以(应该)使用{{ asset('js/respond.min.js') }}
函数。asset()
函数将为您的文件生成正确的URL(就像您将其用于CSS文件一样)。
EDIT:您还链接了两次jQuery,这是不必要的,我认为其中只有一个引用有效。
保留这个(但将其移动到<head></head>
标签内:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
删除这个:
<script src="/js/jquery-1.11.1.js"></script>
编辑2:为什么此更改可以解决问题
有两种方法可以链接到文件(JS、CSS、Image和其他页面——哪种类型无关紧要)。
相对链接
例如js/respond.js
如果没有前导斜杠,浏览器将创建一个相对于当前URL的链接。在您的情况下,当您查看http://example.com/test
时,链接js/respond.js
被假定为http://example.com/js/respond.js
(这是正确的)。
但是,当您查看http://example.com/test/1
时,浏览器会假定一个相对于当前路径的URL。这意味着链路js/respond.js
被假定为http://example.com/test/js/respond.js
(这是错误的)。
如果要查看http://example.com/admin/user/test/1
,则假定的URL为http://example.com/admin/user/test/js/respond.js
。
绝对链接
例如/js/respond.js
或http://www.example.com/js/respond.js
前导斜线告诉浏览器它是一个绝对链接,应该使用完整的URL作为链接的基础来生成链接。这允许你从域上的任何URL链接文件,它就会知道目录是http://example.com/js/respond.js
在所有URL上使用前导斜杠的风险在于,它假设您的网站在域的根目录中运行。如果你将来把你的网站移到一个子目录(可能是用于开发或暂存环境),那么你的链接将不再工作。这就是为什么使用asset()
帮助程序是个好主意。此函数将在您的链接前面加上文件的完整路径asset('js/respond.js')
。它将在所有页面上正确生成URL http://www.example.com/js/respond.js
。