location.hash

简介: location.hash

location.hashwindow.location 对象的一个属性,它返回URL的哈希部分(即“#”后面的部分)。哈希部分通常用于在页面内导航到特定的锚点,但它也可以用来在不同的页面或iframe之间传递信息。

特性和用法:

  1. 页面内导航

    • location.hash 可以被用来在页面内导航到特定的元素。当URL的哈希部分改变时,浏览器会滚动到页面中相应的锚点。
  2. 跨页面通信

    • 通过改变 location.hash 的值,可以在不同页面或iframe之间传递信息。这种方式不会引起页面刷新,因此非常适合实时通信。
  3. 不触发页面加载

    • 改变 location.hash 不会触发页面的重新加载,这使得它成为一个轻量级的通信方式。
  4. 使用示例

    // 设置哈希值
    window.location.hash = 'someValue';
    
    // 读取哈希值
    var hashValue = window.location.hash.substring(1); // 去掉前面的'#'
    console.log(hashValue); // 输出: someValue
    
  5. 监听哈希变化

    • 可以通过监听 hashchange 事件来响应哈希值的变化。
      window.addEventListener('hashchange', function() {
             
      var newHashValue = window.location.hash.substring(1);
      console.log('Hash changed to:', newHashValue);
      });
      
  6. 跨域iframe通信

    • 在跨域的iframe中,可以使用 location.hash 来与父页面通信。父页面可以通过监听 hashchange 事件来获取iframe中的哈希值变化。
  7. 安全性

    • location.hash 只能在同一个源的页面间共享,因此它是一个安全的通信方式。不同源的页面无法读取或修改 location.hash 的值。
  8. 兼容性

    • location.hash 被所有现代浏览器支持,是一个非常可靠的特性。

跨域iframe通信示例:

假设你有一个父页面和一个跨域的iframe,你可以使用 location.hash 来在它们之间传递信息:

父页面

<!DOCTYPE html>
<html>
<head>
    <title>Parent Page</title>
</head>
<body>
    <iframe src="https://anotherdomain.com/iframe.html" id="myIframe"></iframe>
    <script>
        window.addEventListener('hashchange', function() {
    
            var iframe = document.getElementById('myIframe');
            var hashValue = window.location.hash.substring(1);
            iframe.contentWindow.postMessage(hashValue, 'https://anotherdomain.com');
        });
    </script>
</body>
</html>

iframe页面

<!DOCTYPE html>
<html>
<head>
    <title>Iframe Page</title>
</head>
<body>
    <script>
        window.addEventListener('load', function() {
    
            window.location.hash = 'initialValue';
        });
    </script>
</body>
</html>

在这个示例中,当iframe页面加载完成后,它会设置一个初始的哈希值。父页面监听 hashchange 事件,并在哈希值变化时通过 postMessage 将这个值传递给iframe。

通过这种方式,location.hash 可以作为一种简单但有效的跨域通信手段。

相关文章
|
JavaScript
报错[Vue warn]: $listeners is readonly. $attrs is readonly.怎么解决?
报错[Vue warn]: $listeners is readonly. $attrs is readonly.怎么解决?
|
10月前
|
JavaScript 安全 API
iframe嵌入页面实现免登录思路(以vue为例)
通过上述步骤,可以在Vue.js项目中通过 `iframe`实现不同应用间的免登录功能。利用Token传递和消息传递机制,可以确保安全、高效地在主应用和子应用间共享登录状态。这种方法在实际项目中具有广泛的应用前景,能够显著提升用户体验。
1372 9
|
3月前
|
JSON 监控 前端开发
AMIS:百度开源的前端低代码神器,18.4k star 背后的开发效率提升利器
AMIS(前端低代码框架)是百度开源的低代码前端框架,基于纯 JSON 配置即可生成完整后台页面,包括表单、表格、图表、CRUD 列表,支持可视化拖拽编辑。,星标数已达 18.4k,百度内部已沉淀超过 5 万个页面,广泛应用于审核系统、数据管理后台、模型监控等落地场景
799 0
|
6月前
|
人工智能 自然语言处理 前端开发
Trae插件Builder模式深度测评:从编程助手到AI工程师的进化
Trae插件最新推出的Builder模式标志着AI辅助编程工具从简单的代码补全向“AI工程师”角色的转变。该模式允许开发者通过自然语言描述项目需求,自动生成完整的项目结构、代码文件和开发流程,支持VSCode、JetBrains IDE及在线Web版本。Builder模式的核心功能包括自然语言项目初始化、智能项目架构设计和多文件协调代码生成,显著提升了开发效率,降低了技术门槛。然而,它在处理复杂业务逻辑和高度定制化需求方面仍有局限。未来,Builder模式将集成云部署、测试套件生成和DevOps流水线等功能
1490 2
|
7月前
|
监控 数据可视化 测试技术
如何优雅地处理 API 版本控制?
API 版本控制是确保 API 升级不影响现有用户的关键。通过管理多个版本,开发者可以推出新功能或修复问题,同时保留旧版本以常见的版本控制方式包括 URL 路径、查询参数和请求头版本控制。优雅处理版本控制需要提前规划、清晰传达变更信息、提供升级指南,并监控版本使用情况。工具如 [APIPost](https://www.apipost.cn) 可助你轻松跟踪版本差异、管理标签并提升团队协作效率。掌握 API 版本控制,结合专业工具,让 API 开发更高效便捷。
|
JavaScript
成功解决:如何通过this.$router.push(“/Login“)的方式传参,在另外一个页面接收数据的问题
这篇文章介绍了如何在Vue框架中通过路由跳转传递参数,并在另一个页面接收这些参数。具体方法是使用`this.$router.push`方法的`params`属性传递对象,然后在目标页面通过`this.$route.params`接收传递的参数。
成功解决:如何通过this.$router.push(“/Login“)的方式传参,在另外一个页面接收数据的问题
|
前端开发
Hash、onHashChange事件
Hash、onHashChange事件
|
SQL Java 数据库连接
成功解决:was not registered for synchronization because synchronization is not active
这篇文章是关于解决Mybatis在同步过程中出现"was not registered for synchronization because synchronization is not active"错误的技术博客。
成功解决:was not registered for synchronization because synchronization is not active
|
存储 开发框架 JavaScript
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
463 0
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
|
前端开发
antd_使用Input封装实现Form校验效果
本文介绍了如何在Ant Design (antd) 中使用 Input 组件封装实现表单校验效果,包括必填、数字、IP、邮箱、手机号、身份证号和域名等校验规则的使用,以及如何通过回调函数进行校验。
502 4