535种使用JavaScript重新加载页面的方式 - 会有哪些后果?

11

有人列出了535种在JavaScript中重新加载页面的不同方法:

http://www.phpied.com/files/location-location/location-location.html

例如:

location = location
location = location.href
location = window.location
location = self.location
location = window.location.href
location = self.location.href
location = location['href']
location = window['location']
location = window['location'].href
location = window['location']['href']
location = window.location['href']
location = self['location']
location = self['location'].href
location = self['location']['href']
location = self.location['href']
location.assign(location)
location.replace(location)
window.location.assign(location)
window.location.replace(location)
self.location.assign(location)
self.location.replace(location)
location['assign'](location)
window.location['assign'](location)
self['location'].assign(location)
self['location']['assign'](location)
self['location']['replace'](location)
location.href = location
location.href = self.location
location.href = window.location.href

我很好奇是否有人知道这两者在浏览器上的差异-是否会刷新页面但清除缓存-或者情况并非如此?


3
看起来大多数方法都涉及:直接更改“location”,使用“location.assign”、“location.replace”和“location.reload”。其余的只是访问相同值的重复方式。 - zzzzBov
6
更像是将3个方法混淆了535次。 - Alex Turpin
如果您希望在所有浏览器中都能正常工作,请使用标准的window.location.reload()。 - Gerben
1
他忘记了 location=document.documentURI。 - Gerben
我在研究一个Chromium bug时偶然发现了这个问题,我可以肯定地说,在该浏览器中,location.reload(1);window.location.replace(location);不会通过相同的代码路径运行:https://bugs.chromium.org/p/chromium/issues/detail?id=280460#c11这里有些答案提到可能与表单[重新]提交有关。 - Vasiliy Sharapov
2个回答

7

所有这些示例在浏览器中都被视为相同的。

实际上,它们大多数只是在Javascript中访问变量的不同方式。你可能可以用“XXX个不同的方法将全局变量赋值为另一个全局变量的值”来写一个类似的列表。

例如:location.href、window.location.href、self.location.href、location['href']、window.location['href']、self.location['href']都指向完全相同的值。

在你发布的列表中,真正不同的只有以下两种方式:

location = location //assign the whole location object to the location global variable
location = location.href //assign the string location.href to the location global variable

在他发布的示例中,如果位置有哈希值,则没有一种方法会重新加载页面。但是在链接的页面上,例如location.reload(),可以重新加载页面。 - Robert
有没有一种方法可以重新加载页面而不必再次下载它?就像重置一样? - Zibri

6

location.reload() 的作用类似于表单提交(即它会传递所有表单值)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接