恐怕这可能是不可能的,但有没有办法改变一个URL的哈希值不留在浏览器的历史记录中的条目并没有重装?或者做同等的?
至于具体细节,我正在开发一些基本的哈希导航:
//hash nav -- works with js-tabs
var getHash = window.location.hash;
var hashPref = "tab-";
function useHash(newHash) {
//set js-tab according to hash
newHash = newHash.replace('#'+hashPref, '');
$("#tabs li a[href='"+ newHash +"']").click();
}
function setHash(newHash) {
//set hash according to js-tab
window.location.hash = hashPref + newHash;
//THIS IS WHERE I would like to REPLACE the location.hash
//without a history entry
}
// ... a lot of irrelavent tabs js and then....
//make tabs …Run Code Online (Sandbox Code Playgroud) javascript jquery browser-history fragment-identifier browser-state
如何编写将在URL锚点的任何更改上执行的JavaScript回调代码?
javascript event-handling fragment-identifier dom-events hashchange
我正在使用片段标识符为我的Web应用程序中的AJAX事件创建一个永久链接,类似于这个人.就像是:
http://www.myapp.com/calendar#filter:year/2010/month/5
Run Code Online (Sandbox Code Playgroud)
我做了很多搜索,但找不到片段识别符的有效字符列表.在W3C规范不提供任何内容.
我是否需要将字符编码与一般的URL相同?
在任何地方似乎都没有任何好的信息.
我有以下问题:例如我有这样的路线:
routes.Add(new Route("forums/thread/{threadOid}/last", new MvcRouteHandler())
Defaults = new RouteValueDictionary(
new { controller = "Thread", action ="ShowThreadLastPostPage"}),
Constraints = new RouteValueDictionary(new { threadOid = @"^\d+$" })
}
);
Run Code Online (Sandbox Code Playgroud)
有没有办法使用RedirectToAction方法导航到这样的URL:
forums/thread/{threadOid}/last#postOid
是否有可能删除哈希window.location而不会导致页面跳转到顶部?我需要能够修改哈希而不会引起任何跳转.
我有这个:
$('<a href="#123">').text('link').click(function(e) {
e.preventDefault();
window.location.hash = this.hash;
}).appendTo('body');
$('<a href="#">').text('unlink').click(function(e) {
e.preventDefault();
window.location.hash = '';
}).appendTo('body');
Run Code Online (Sandbox Code Playgroud)
在这里查看实例:http://jsbin.com/asobi
当用户单击" 链接 "时,修改的哈希标记没有任何页面跳转,因此工作正常.
但是当用户点击" 取消链接 "时,删除了has标记,页面滚动跳转到顶部.我需要删除没有这种副作用的哈希.
我刚在http://ritter.vg上设置了我的新主页.我正在使用jQuery,但非常简单.
它使用AJAX加载所有页面 - 我将其设置为通过检测URL中的哈希来允许书签.
//general functions
function getUrl(u) {
return u + '.html';
}
function loadURL(u) {
$.get(getUrl(u), function(r){
$('#main').html(r);
}
);
}
//allows bookmarking
var hash = new String(document.location).indexOf("#");
if(hash > 0)
{
page = new String(document.location).substring(hash + 1);
if(page.length > 1)
loadURL(page);
else
loadURL('news');
}
else
loadURL('news');
Run Code Online (Sandbox Code Playgroud)
但我不能让后退和前进按钮工作.
有没有办法检测何时按下后退按钮(或检测哈希值何时更改)而不使用setInterval循环?当我尝试使用.2和1秒超时时,它固定了我的CPU.
转到http://www.facebook.com/facebook?v=wall,然后单击信息选项卡.内容将被加载,地址栏现在变为http://www.facebook.com/facebook?v=info但网页没有重新加载.
起初我认为它是Ajax,但我的问题是,如何在不重新加载的情况下更改地址栏?我知道我可以使用JS更改锚点(#wall)但是querystring(?v = wall),怎么样?
我有以下代码:
$('ul.questions li a').click(function(event) {
$('.tab').hide();
$($(this).attr('href')).fadeIn('slow');
event.preventDefault();
window.location.hash = $(this).attr('href');
});
Run Code Online (Sandbox Code Playgroud)
这简单地根据您点击的时间淡化div,但我希望您点击时更改页面URL哈希标记,以便人们可以复制和添加书签.目前,当哈希标签发生变化时,这会有效地重新加载页面.
是否可以更改哈希标记而不重新加载页面以防止跳跃效应?
我是ajax-ifying在我的一个项目中的分页,因为我希望用户能够为当前页面添加书签,我通过哈希附加页码,说:
onclick="callPage(2); window.location.hash='p=2'; return false;"
Run Code Online (Sandbox Code Playgroud)
并且hyperlink它在它上面工作正常和一切,除了,当页码是1,我不想URL成为/products#p=1,我只是希望它是/products
我试过这些变化:
window.location.hash=''工作,但网址现在像/products#,我不是那里的哈希./products#p=3因为我没有弄乱哈希.<a href="#">,他应该使用javascript:void(0).(他们从未听说过Ajax吗?)所以最后,我决定制作这个帖子,我在这里发现了几个类似的线程,但所有的答案与我的第二点非常相似.
所以我的一个大问题仍然是一个问题:如何从网址中挖出哈希,并可能离开宇宙?(仅限第一页!)
我一直在尝试找到一种方法将window.location.hash更改为Jquery UI选项卡中当前选定的选项卡.
我试过了:
$("#tabs > ul").tabs();
$("#tabs > ul").bind("tabsshow", function(event, ui) {
window.location.hash = ui.tab;
})
Run Code Online (Sandbox Code Playgroud)
这会导致在更改选项卡时将哈希值更改为#undefined.
我也尝试过:
$("#tabs > ul").tabs({
select: function(event, ui) {
window.location.hash = ui.tab }
});
Run Code Online (Sandbox Code Playgroud)
但这似乎根本没有触发.
任何帮助,将不胜感激.谢谢.
编辑:看起来我的初始问题的一部分与其他地方干扰这个问题的js有关.接受的答案和略微修改的其他建议答案都有效.谢谢大家.
javascript ×6
jquery ×4
ajax ×3
hashchange ×2
asp.net ×1
asp.net-mvc ×1
dom-events ×1
hash ×1
html5 ×1
jquery-ui ×1
navigation ×1
reload ×1
tabs ×1
webkit ×1