45

为了重新加载页面而不完全重新加载我正在使用的所有内容:

window.top.location=window.top.location;

但是,当有锚文本时,由于某种原因,这不起作用。在这种情况下,它似乎什么都不做,但更有可能刷新锚点。

有什么解决方法可以在不重新加载缓存的图像和脚本的情况下重新加载页面(如上)?

4

5 回答 5

75

尝试使用location.reload(false).

正如 MDN 所说,第二个参数是一个布尔值,指示是否绕过缓存。false如您所愿,继续使用缓存。

于 2013-04-27T03:25:06.073 回答
6

icktoofay 解释了解决方法,所以我只是解决这个问题:

但是,当有锚文本时,由于某种原因,这不起作用。在这种情况下,它似乎什么都不做,但更有可能刷新锚点。

HTML 5 描述了Location接口,它涵盖了对document.location.

当调用 assign(url) 方法时,UA 必须解析相对于入口脚本的基本 URL 的参数,如果成功,则必须将浏览上下文导航到指定的 url。

所以导航操作只看到一个绝对 URL,所以只分配一个片段与分配一个与带有片段的页面 URL 相同的绝对 URL 没有区别。

导航

8 片段标识符:将 URL 解析器算法应用于新资源的绝对 URL 和正在导航的浏览上下文的活动文档的地址。如果生成的解析 URL 的所有组件(忽略任何片段组件)都是相同的,并且将使用 HTTP GET 或等效方法获取新资源,并且新资源的解析 URL 具有不为空的片段组件(甚至如果它为空),则导航到该片段标识符并中止这些步骤。

最后,导航到片段标识符

当用户代理需要滚动到片段标识符时,它必须使用 CSSOM 视图规范中定义的将元素滚动到视图算法来更改文档的滚动位置,并设置对齐到顶部标志,或者执行其他一些操作操作,以使文档的指定部分引起用户的注意。

于 2013-04-27T03:31:47.763 回答
4

完全确定页面本身已重新加载但其他缓存元素未重新加载的最佳方法是使用随机参数更改 location.search 查询字符串。

例如,

location.search='?'+Math.random();

缓存不会被绕过,因此页面的所有元素都将从缓存中加载,但主页面本身被迫重新加载,因为 HTTP 需要对每个唯一查询字符串 / location.search 值向服务器发出另一个请求。

如果您的页面本身就是一个使用查询字符串的应用程序(如 file.cgi?param=xyz¶m2=abc...),那么您将不得不附加到查询字符串而不是完全替换它:

if (location.search.length > 1)
location.search+='&'+Math.random();
else
location.search='?'+Math.random();
于 2013-04-27T03:32:36.947 回答
0

对于以下情况,我一直在尝试所有这些:我有一个带有微型购物车的复杂页面,客户可以在其中保存带有产品列表的项目。现在我想让客户打开一个新页面来下载报告,同时通过打开手风琴等保持父页面完整。

使用 IE8 仍运行 XP 的客户在打开报告窗口后会出现父页面乱码。编程是在 ASP.NET 中,后面有 VB 代码。这个解决方案对我有用。

Dim proj As String = "<script language=javascript> location.assign('/Projects.aspx');
window.open('Report.aspx?project=" & projid.Text & "&rpt=bill');</script>"
Session.Add("AddCart", idx.ToString("N0"))
Response.Write(proj)

location.assign 用于刷新父页面,而 window.open 将在新窗口中打开报表。

会话变量用于跟踪应打开哪个手风琴行。这是在 Page_Load 中处理的

    If Not Page.IsPostBack Then
        LoadProjects()
        If Session("AddCart") IsNot Nothing Then
            Dim idx As Integer = Session("AddCart")
            ProjAccordion.SelectedIndex = idx
            Session.Remove("AddCart")
        ElseIf Session("CopyProj") IsNot Nothing Then
            Dim idx As Integer = Session("CopyProj")
            ProjAccordion.SelectedIndex = idx
            Session.Remove("CopyProj")
        End If
    End If
于 2014-07-25T14:31:54.563 回答
-2

使用 location.href 使技巧 http://www.w3schools.com/jsref/prop_loc_href.asp

于 2013-04-27T05:27:25.900 回答