我有一个附有长查询字符串的 URL。页面加载后,我不需要查询字符串。所以我想在不重新加载页面的情况下从地址栏中删除查询字符串。
我试过parent.location.hash = '';
了window.location.href = '/#'
他们没有改变。
我有一个附有长查询字符串的 URL。页面加载后,我不需要查询字符串。所以我想在不重新加载页面的情况下从地址栏中删除查询字符串。
我试过parent.location.hash = '';
了window.location.href = '/#'
他们没有改变。
正如其他人所说,您可以在现代浏览器(IE10+、FF4+、Chrome5+)中使用History API来做到这一点。答案中没有完整的示例,所以我想分享我的解决方案,因为我只是需要做同样的事情:
history.pushState(null, "", location.href.split("?")[0]);
如果您使用的是Modernizr,您还可以检查 History API 是否可用,如下所示:
if (Modernizr.history) {
history.pushState(null, "", location.href.split("?")[0]);
}
这在使用history api的现代浏览器中是可以实现的,但可能不是解决您的问题的最佳方法。
history.replaceState({}, 'some title', '/');
听起来您最好处理数据然后重定向到主页,而不是直接返回 HTML 文档。
由于您不想保留 URL,因此它对书签没有用处,因此您很可能最好发出 POST 请求。
这表明您应该使用POST-Redirect-GET 模式。
如果不重新加载页面,您将无法做到这一点,想象一下您是否可以在浏览器地址栏中放置您想要的任何内容?安全乐趣:)
尽管您现在可以使用新的history API在 HTML5 中执行此操作(仅适用于支持它的浏览器),但实际上,您的场景最好需要重写而不是包含它(似乎大锤要破解坚果)。
正如您所说,页面加载后您不需要查询字符串,您应该真正回发,然后在完成处理后重定向到另一个 URL。
window.history.replaceState(null, null, window.location.pathname);
采用history.replaceState({}, "Title", "page.html");
相同的语法pushState
。但是,您必须找到一种方法让 IE 理解这一点。
更好的方法是使用 Apachemod_rewrite
模块。它很容易使用。
我在我的个人项目中使用此代码片段,我需要在不重新加载的情况下删除 URL 参数:
var newURL = location.href.split("?")[0];
window.history.pushState('object', document.title, newURL);
我想再添加一种方法来做到这一点,尤其是对于那些正在使用$routeProvider
.
正如在其他一些答案中提到的那样,您可以使用:
var yourCurrentUrl = window.location.href.split('?')[0];
window.history.replaceState({}, '', yourCurrentUrl );
或通过在历史堆栈中创建新记录:
window.history.pushState({}, '', yourCurrentUrl );
有关使用 and 的详细说明history.pushState
,history.replaceState
您可以阅读SO 上的这篇文章。
但是,如果您在应用程序中使用 Angular $routeProvider
,那么如果与任何现有模式匹配,它仍会捕获此更改。为避免这种情况,请确保您$routeProvider
已将reloadOnSearch标志设置为,false
因为默认情况下它是true
.
例如:
$routeProvider.when("/path/to/my/route",{
controller: 'MyController',
templateUrl: '/path/to/template.html',
//Secret Sauce
reloadOnSearch: false//Make sure this is explicitly set to false
});
更新代码现在它可以工作了
只需在您要更改其链接的页面中添加以下代码。
// javascript function
function buildLin(first) {
var firs = first.toString()
//alert(firs);
//document.getElementById("team").value = "1";
document.location.hash = "#" + firs.replace(/ /g, "_");
//alert(document.location.hash);
}
//jQuery to call above function after page loads
$(document).ready(function () {
buildLin(2);
});
不要忘记在你的页面上添加 http://code.jquery.com/jquery-latest.js </p>
POST
您可以通过使用而不是完全避免查询字符串GET
。