Javascript 将hashbang重定向到带有history.js的url
我注意到history.js会自动更改Javascript 将hashbang重定向到带有history.js的url,javascript,html,browser,history.js,Javascript,Html,Browser,History.js,我注意到history.js会自动更改 http://www.site.com/some/path#/other/path 到 在支持html5的浏览器中。 这很好,但它实际上并没有将浏览器重定向到/other/path,它只是更改地址栏中的url。 我需要它也重定向。我确实试着用以下方法来理解这一点: <script> $(function() { $(window).on('statechange', function() { v
http://www.site.com/some/path#/other/path
到
在支持html5的浏览器中。
这很好,但它实际上并没有将浏览器重定向到/other/path,它只是更改地址栏中的url。
我需要它也重定向。我确实试着用以下方法来理解这一点:
<script>
$(function() {
$(window).on('statechange', function() {
var State = History.getState();
console.log('state', State.url);
});
});
</script>
$(函数(){
$(窗口).on('statechange',function()){
var State=History.getState();
log('state',state.url);
});
});
但是statechange事件永远不会发生……那么我怎么做重定向呢?你需要依靠url来实现这一点,我们有很好的框架,比如backbone.js路由,甚至还有像history.js这样的插件 但是如果没有这个插件,你可以从url中获得hash-bang,并为对应于它的列表应用活动样式 为了做到这一点,HTML必须是这样的
<ul id="ulid" class="">
<li class="">
<a href="#tab=one" id="one" class="active">text1</a>
</li>
<li>
<a href="#tab=two" id="two" class="">text2</a>
</li>
<li>
<a href="#tab=three" id="three" class="">text3</a>
</li>
<li>
<a href="#tab=four" id="four" class="">text4</a>
</li>
<li>
<a href="#tab=five" id="five" class="">text5</a>
</li>
<li>
<a href="#tab=six" id="six" class="">text6</a>
</li>
</ul>
然后可以在页面加载时运行此代码
$('ul#ulid li a').click(function(){
$('li a').removeClass('active');
$(this).addClass('active');
});
var selectedTab = parseHashBangArgs(window.location.href).tab;
if(selectedTab){
$('li a').removeClass('active');
$('#'+selectedTab).addClass('active');
}
完成了
function parseHashBangArgs(aURL) {
aURL = aURL || window.location.href;
var vars = {};
var hashes = aURL.slice(aURL.indexOf('#') + 1).split('&');
for(var i = 0; i < hashes.length; i++) {
var hash = hashes[i].split('=');
if(hash.length > 1) {
vars[hash[0]] = hash[1];
} else {
vars[hash[0]] = null;
}
}
return vars;
}
$('ul#ulid li a').click(function(){
$('li a').removeClass('active');
$(this).addClass('active');
});
var selectedTab = parseHashBangArgs(window.location.href).tab;
if(selectedTab){
$('li a').removeClass('active');
$('#'+selectedTab).addClass('active');
}