4 回答
TA贡献1796条经验 获得超10个赞
关于主题window
标准浏览器实现一个Window接口,通过该接口window向文档中的 JavaScript 公开全局属性。Window即使打开新选项卡,后续导航也会在同一文档中加载不同的文档。因此,您使用的属性(例如window.location文档window.history中的属性)将在用户(从 Facebook)导航到您的页面之前出现Window,因此可用于您的文档。
这也适用于当您直接在新的浏览器窗口中加载页面时 - 文档将有权访问该window属性。更多信息请Window参见window:https://developer.mozilla.org/en-US/docs/Web/API/Window
如果您担心页面被非标准浏览器加载,或者由于某种原因, window 属性history和location属性被覆盖,您可以在调用它们之前检查它们是否可用:
if (window && window.location && window.location.hash) {
// safely use window.location.hash here
}
但即便如此,客户端的浏览器也会抑制该错误。
document.title关于使用with的主题replaceState()
规范将其指定为字符串,因此根据设计,如果未设置,它将返回空字符串。在文档完全加载之前,Mozilla 不会发出关于使用它的警告。更多信息请参见https://developer.mozilla.org/en-US/docs/Web/API/Document/title
以下是我使用不带标签的 HTML 页面进行的一些快速测试,看看是否确实如此<title>。
<html>
<head>
<script>
console.log("title", document.title)
window.history.replaceState({}, document.title, "newHMTL.page");
</script>
</head>
<body>
Testing
</body>
</html>
没有预期的错误或警告。
关于主题replaceState
该规范指出,大多数浏览器都会忽略您传递给的title/参数:document.titlereplaceState
目前大多数浏览器都会忽略此参数,尽管将来可能会使用它。在此处传递空字符串应该可以安全地防止将来对该方法进行更改。或者,您可以传递州的简短名称。
因此,当我准备好页面时,进行一些更快速的测试。将标题设置为null; undefined; and a function;然后将其传递给replaceState不会更改历史记录中的标题,也不会在有标签<title>或没有标签时在 Chrome 中引发错误。所以 6 次测试。
<html>
<!-- <title>title</title> -->
<head>
<script>
let title = () => alert("huh?") //null; //undefined;
console.log("Title", title);
window.history.replaceState({}, title, "NewHTML.page");
//works as expected
</script>
</head>
<body>
Testing
</body>
</html>
TA贡献1828条经验 获得超6个赞
是的,它是安全的,因为window
当浏览器开始解析头部时,对象就准备好了。
浏览器创建窗口 > 窗口将文档对象加载到自身 > 文档对象渲染 DOM > 文档对象加载其所有资源 > 窗口对象触发 onload 事件
该head
部分是 DOM api 的一部分,而Document
对象是对象的属性window
,因此document
一旦窗口对象准备好,就会加载该部分。由于它history.replaceState
是对象的一部分window
,因此在头部执行任何脚本部分都是安全的。
Window 接口代表一个包含 DOM 文档的窗口;document 属性指向该窗口中加载的 DOM 文档。可以使用 document.defaultView 属性获取给定文档的窗口
TA贡献1796条经验 获得超7个赞
阿罗哈)是的,这对您和您的客户来说是安全的,因为窗口是一个全局对象,每个人都可以在浏览器中使用它,并且任何人都可以使用它。并且您的函数可以由任何人执行。在这种情况下,不用担心安全问题;)
TA贡献1865条经验 获得超7个赞
它非常安全,但如果没有监听器,我不会在开发中使用它DOMContentLoaded
。为了更加安全并考虑到那些使用旧版浏览器的人,我建议您添加该监听器,DOMContentLoaded
这样window.onload
您就不会在加载速度较慢的页面上遇到任何问题。此外,对于window.history
API,由于它是本机函数,不需要单独的功能,因此您可以安全、立即使用它。
TL;DR
添加一个DOMContentLoaded
侦听器以防万一。
添加回答
举报