gpt4 book ai didi

javascript - 在 中使用 window.history.replaceState() 是否安全?

转载 作者:行者123 更新时间:2023-12-03 06:50:52 25 4
gpt4 key购买 nike

我想删除 #_=_人工制品 Facebook adds to URLs当用户登录我的网站时。
我正在使用这个脚本:

if (window.location.hash === '#_=_') {
const uri = window.location.toString();
const withNoHash = uri.substring(0, uri.indexOf('#'));
window.history.replaceState({}, document.title, withNoHash);
}
我希望脚本尽快启动,所以我把它放在了 <head>它似乎在 Chrome 和 Firefox 上运行良好。
window.history 是标准化的吗?当脚本在 <head> 中执行时 API 准备就绪?
(顺便说一下,还有 document.title)。

最佳答案

关于 window 的话题
标准浏览器实现 Window接口(interface),从中全局window属性在文档中暴露给 javascript。后续导航会在同一个Window中加载不同的文档即使打开了新标签页。所以你使用的属性,比如 window.locationwindow.history在您的文档中,将出现在 Window在用户导航到您的页面(从 Facebook)并因此可用于您的文档之前。
这也适用于在新浏览器窗口中直接加载页面时 - 文档将有权访问 window属性(property)。更多关于 Windowwindow这里:https://developer.mozilla.org/en-US/docs/Web/API/Window
如果您担心您的页面会被非标准浏览器加载,或者由于某种原因,window 属性的 historylocation属性被覆盖,您可以在调用它们之前检查它们是否可用:

if (window && window.location && window.location.hash) {
// safely use window.location.hash here
}
但即便如此,客户端的浏览器也会抑制错误。
关于使用document.title的话题与 replaceState()
规范将其指定为字符串,因此根据设计,如果未设置,它将返回一个空字符串。 Mozilla 没有警告在文档完全加载之前使用它。更多这里 https://developer.mozilla.org/en-US/docs/Web/API/Document/title
下面是我做的一些快速测试,看看它是否真的是使用没有 <title> 的 HTML 页面的情况。标签。
<html>
<head>
<script>
console.log("title", document.title)
window.history.replaceState({}, document.title, "newHMTL.page");
</script>
</head>
<body>
Testing
</body>
</html>
没有预期的错误或警告。
关于 replaceState 的话题
规范指出大多数浏览器会忽略 title/ document.title传递给 replaceState 的参数:

Most browsers currently ignore this parameter, although they may useit in the future. Passing the empty string here should be safe againstfuture changes to the method. Alternatively, you could pass a shorttitle for the state.


因此,当我准备好页面时,进行了一些更快速的测试。将标题设置为 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>

关于javascript - 在 <head> 中使用 window.history.replaceState() 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64703212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com