硬刷新浏览器页面,然后使用 javascript 重定向到 url

Posted

技术标签:

【中文标题】硬刷新浏览器页面,然后使用 javascript 重定向到 url【英文标题】:hard refresh of browser page and then redirect to a url using javascript 【发布时间】:2015-06-22 09:24:38 【问题描述】:

我正在尝试重新加载页面并将其重定向到另一个页面, 或者只是将它重定向到另一个,但我不能这样做

window.location.href

windown.location

因为我有一个 Angular 单页应用程序,它可以捕获路线,而不是重新加载页面,而是直接打开部分

我试过了——

window.location.reload(true)

但它会重新加载页面并且无法更改 url 我也试过了——

window.location.assign

window.location.replace

有什么办法吗?

【问题讨论】:

你可以试试window.open('url', '_self') 你能用小提琴或笨拙的​​方式复制它吗? plnkr.co/edit/5B6hH1Ro7CS4PmTDXTy4?p=preview ...您必须在弹出的窗口中查看它... 我只是通过打击和尝试实现了它。我所做的是在通过 $window.location.href = url; 更改位置之后以前和现在单独使用时都对我不起作用。我在下一行添加了 window.location.reload(true) 以便使用新的 url 重新加载窗口 【参考方案1】:

AngularJS 会执行完整页面重新加载的三种情况:

包含目标元素的链接

例子:

<a href="/ext/link?a=b" target="_self"> link  </a>

指向不同域的绝对链接 示例:

<a href="http://angularjs.org/">link</a>

以“/”开头的链接在定义 base 时指向不同的基本路径 示例:

<a href="/not-my-base/link">link</a>

更新:

使用javascript

$location 服务只允许您更改 URL;它不允许您重新加载页面。当您需要更改 URL 并重新加载页面或导航到不同的页面时,请使用较低级别的 API:$window.location.href。

见:

https://docs.angularjs.org/guide/$location

https://docs.angularjs.org/api/ng/service/$location

【讨论】:

这三种方式不是angularjs特有的,任何html页面都是这样的:p【参考方案2】:

为了重定向到不同的页面,你应该使用

$window.open('url', '_self')

这将再次加载您的页面。

【讨论】:

不行,我也试过 var win = window.self win.open(url,"_self") 我在子作用域中调用它,这有什么关系吗? @deadman 你在使用模式窗口吗?为什么你不考虑引导弹出窗口angular-ui.github.io/bootstrap【参考方案3】:

试试 window.location = url;

请记住,网址必须具有协议,即 http:// 或 https://

【讨论】:

正如我在问题中所说,window.location 不起作用,是的,我确实添加了 http:// 你也可以试试这个。 ***.com/questions/27941876/…【参考方案4】:

所以您需要更改 URL 末尾的哈希值吗?即从#/#/otherpage/

如果是,location.hash = "/otherpage/";

【讨论】:

不,任何 url 更改都会被 angular 捕获,它不会让整个页面刷新,只会更改视图和控制器。这就是为什么 window.location.reload(true) 对我有用,而在我上面展示的解决方案中没有其他解决方案,但除了 url 更改之外,我还想更改 url 【参考方案5】:

根据https://docs.angularjs.org/guide/$location,如果 AngularJS 使用 HTML5 模式,它永远不会在现代浏览器中执行完整的页面重新加载。

HTML5 模式

在 HTML5 模式下,$location 服务的 getter 和 setter 通过 HTML5 历史 API 与浏览器 URL 地址交互。这允许使用常规的 URL 路径和搜索段,而不是它们的 hashbang 等价物。如果浏览器不支持 HTML5 History API,$location 服务将自动回退到使用 hashbang URL。这让您不必担心显示您的应用的浏览器是否支持历史 API; $location 服务透明地使用最佳可用选项。

在旧版浏览器中打开常规 URL -> 重定向到 hashbang URL 在现代浏览器中打开 hashbang URL -> 重写为常规 URL 请注意,在这种模式下,Angular 会拦截所有链接(受以下“Html 链接重写”规则的约束)并以从不执行完整页面重新加载的方式更新 url。

(强调我的)

由于 Hashbang 模式是默认模式,因此代码必须在某处设置 HTML5 模式。

【讨论】:

以上是关于硬刷新浏览器页面,然后使用 javascript 重定向到 url的主要内容,如果未能解决你的问题,请参考以下文章

使用 JavaScript 刷新浏览器后如何在一个页面网站中保存部分位置?

如何使用 Selenium 进行硬刷新

刷新浏览器时 sessionStorage 消失了 - Javascript

Keycloak 在硬页面刷新后就像未初始化一样

vue.js页面刷新出现闪烁问题的解决

jQuery Mobile 弹出页面导航后不显示,仅在硬刷新或返回同一页面后显示