我正在实现一个网站,通过使用History.js在前台页面通过ajax加载新的部分时动态设置其URL。
这似乎很好用,但是在Internet Explorer中,History.js创建的哈希段存在问题。
以下是页面上使用jquery创建的链接示例:
.htaccess文件将任何类似于http://example.com/public/category_a的url重定向到http://example.com,然后javascript解析url并通过ajax请求在changeState处理程序中加载相应的部分。
如果我点击另一个链接,URL 就会被设置为,例如:
在IE浏览器中,如果我打开网站的根目录,并点击链接,如上所述,内容会加载,并且URL会设置为带有哈希的格式:
如果我点击下一个链接,URL 将被设置为:
当我在IE中打开一个在Firefox中添加了书签但URL中没有哈希值的页面时,问题就出现了。让我们以我们通常的例子为例:
如果我直接在IE中打开此URL,通过书签或将URL粘贴到浏览器地址栏中,.htaccess会成功重定向,js文件可以正确解析URL并加载内容。然而,如果我现在点击category_b链接,则URL将被History.pushState设置为:
然而,History.js似乎将整个先前的URL作为后续pushStates的基本URL。我尝试在History.pushState中设置绝对URL,但没有成功。如上面的代码块中所示,我有一个针对IE的特定pushState语句。我已经尝试以各种方式进行配置。我该如何让History pushState识别:
作为URL的基础部分,应该将哈希部分附加到哪里?还是有比我上面描述的方法更好的方法?
这似乎很好用,但是在Internet Explorer中,History.js创建的哈希段存在问题。
以下是页面上使用jquery创建的链接示例:
function connect_browse_buttons(){
$('.browselink').each(function(){
$(this).click(function(){
var action = $(this).attr('name');
action = action.substring( ('action_browse').length );
browsetype = action;
if (isIE){
// remove data object and title to avoid use of SUIDs by History.js in IE
History.pushState(null, null, '/public/' + action);
} else {
History.pushState({oldurl: History.getState()['url']}, "Example " + action, config.wwwroot + "public/" + action);
}
return false;
});
});
}
.htaccess文件将任何类似于http://example.com/public/category_a的url重定向到http://example.com,然后javascript解析url并通过ajax请求在changeState处理程序中加载相应的部分。
Javascript会检查类似于
http://example.com/public/category_a
对于Internet Explorer创建的等效备用URL,即AND
http://example.com/#public/category_a
这一切都正常 - 所以:
在Firefox中,如果我打开网站根目录下的网站http://example.com,并按照上述操作单击链接,则内容会加载(在changeState处理程序中),并通过History.pushState设置URL:
http://example.com/public/category_a
如果我点击另一个链接,URL 就会被设置为,例如:
http://example.com/public/category_b
在IE浏览器中,如果我打开网站的根目录,并点击链接,如上所述,内容会加载,并且URL会设置为带有哈希的格式:
http://example.com/#public/category_a
如果我点击下一个链接,URL 将被设置为:
http://example.com/#public/category_b
当我在IE中打开一个在Firefox中添加了书签但URL中没有哈希值的页面时,问题就出现了。让我们以我们通常的例子为例:
http://example.com/public/category_a
如果我直接在IE中打开此URL,通过书签或将URL粘贴到浏览器地址栏中,.htaccess会成功重定向,js文件可以正确解析URL并加载内容。然而,如果我现在点击category_b链接,则URL将被History.pushState设置为:
http://example.com/public/category_a#./category_b
我真正想要的是将URL设置为:
http://example.com/#public/category_b
然而,History.js似乎将整个先前的URL作为后续pushStates的基本URL。我尝试在History.pushState中设置绝对URL,但没有成功。如上面的代码块中所示,我有一个针对IE的特定pushState语句。我已经尝试以各种方式进行配置。我该如何让History pushState识别:
http://example.com
作为URL的基础部分,应该将哈希部分附加到哪里?还是有比我上面描述的方法更好的方法?