Advertisement

如何使用window.postMessage在HTML5网页间传递数据

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本文介绍了如何利用Window.postMessage API实现在不同HTML5网页之间的安全数据通信,包括其基本用法及跨域消息处理机制。 估计很少人知道HTML5 API里有一个window.postMessage功能。这个API允许程序员在两个窗口或frames之间发送数据,即使它们来自不同的域。简单来说,它就像是跨域的AJAX通信,但不是浏览器与服务器之间的交互,而是在客户端之间的交流。 我们要先创建一个消息发起端(即源“source”)。作为发起方,我们可以打开一个新的窗口或者创建一个iframe,并往新窗口发送数据。为了简化演示过程,我们每6秒钟向目标窗口发送一次信息,并设置监听器以接收来自目标窗口的反馈信息。 例如: 1. 打开新的窗口: ```javascript var domain = http://scriptandstyle.com; var myPopup = window.open(domain + /windowPostMessageListener.html, myWindow); ``` 2. 定时发送消息: ```javascript setInterval(function() { // 发送数据给目标窗口的代码 }, 6000); ``` 以上就是window.postMessage的基本用法,它在除了IE6和IE7之外的所有浏览器中都得到了支持。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • 使window.postMessageHTML5
    优质
    本文介绍了如何利用Window.postMessage API实现在不同HTML5网页之间的安全数据通信,包括其基本用法及跨域消息处理机制。 估计很少人知道HTML5 API里有一个window.postMessage功能。这个API允许程序员在两个窗口或frames之间发送数据,即使它们来自不同的域。简单来说,它就像是跨域的AJAX通信,但不是浏览器与服务器之间的交互,而是在客户端之间的交流。 我们要先创建一个消息发起端(即源“source”)。作为发起方,我们可以打开一个新的窗口或者创建一个iframe,并往新窗口发送数据。为了简化演示过程,我们每6秒钟向目标窗口发送一次信息,并设置监听器以接收来自目标窗口的反馈信息。 例如: 1. 打开新的窗口: ```javascript var domain = http://scriptandstyle.com; var myPopup = window.open(domain + /windowPostMessageListener.html, myWindow); ``` 2. 定时发送消息: ```javascript setInterval(function() { // 发送数据给目标窗口的代码 }, 6000); ``` 以上就是window.postMessage的基本用法,它在除了IE6和IE7之外的所有浏览器中都得到了支持。
  • 使 sessionStorage HTML5 值的方法
    优质
    本文介绍了如何利用HTML5中的sessionStorage API在不同页面之间安全存储和传输数据值,实现页面间的通信。 HTML5引入了两种客户端存储方式:localStorage和sessionStorage。这两种方法可以帮助开发者在用户的本地浏览器中保存数据,从而减轻服务器的负担并提高用户体验。 LocalStorage提供了一种持久性的无时间限制的数据储存机制,并且它的容量通常至少为5MB,所有同域名下的页面都可以共享这些数据。相比之下,SessionStorage则只为单个浏览器标签页(session)存储数据,在关闭该标签或窗口后,所保存的数据将被清除。这种特性使得SessionStorage非常适合在单次会话中需要临时储存信息的场景。 当使用sessionStorage进行不同网页间的信息传递时,通常是在一个页面生成或者获取到一些数据之后,再把这些数据转移到另一个页面上继续处理。例如,在用户提交表单后跳转至另一页完成后续操作的过程中,可以利用SessionStorage来暂时存储这些中间状态的数据信息。 在源页面(如A)中创建或读取数据时: ```javascript if(typeof(Storage) !== undefined) { 存储数据到sessionStorage sessionStorage[unitGroup] = JSON.stringify(data.unit.value); } else { 不支持Web Storage API } ``` 然后,在目标页面(例如B页),可以通过以下方式获取先前存储的数据进行进一步操作: ```javascript if(typeof(Storage) !== undefined) { 获取之前保存在sessionStorage中的数据 var unit_group = sessionStorage[unitGroup] || ; if(unit_group) { 将获取到的JSON格式字符串转换为JavaScript对象,并发送至服务器。 var newData = {unitGroup: JSON.parse(unit_group)}; // 发送AJAX请求以将新数据传送到后端处理 } } else { 不支持Web Storage API } ``` 在使用sessionStorage或localStorage时,开发者需要确认浏览器是否兼容Web Storage API。可以通过以下代码判断: ```javascript if(typeof(Storage) !== undefined) { 浏览器支持Web Storage API。 } else { 浏览器不支持Web Storage API。 } ``` SessionStorage特别适用于存储临时信息的场景,例如在多步骤表单中,用户在每个阶段填写的数据可以暂时保存起来。由于这些数据仅限于当前会话内使用,在同一应用的不同标签页之间将各自独立。 总的来说,sessionStorage为页面间的信息传递提供了一种便捷的方法,并有助于提升Web应用程序的整体响应速度和用户体验。然而需要注意的是,开发者应当妥善处理存储与检索逻辑,确保在用户关闭浏览器或特定窗口时能及时清除这些数据,避免造成不必要的残留问题。
  • Vue中于父子组件与调方法
    优质
    本教程详细介绍了如何在Vue框架下的父子组件之间有效地传递数据和调用方法,帮助开发者掌握组件通信的关键技巧。 一、传递数据 有时在子组件中需要用到父组件的数据。 然而,在默认情况下,子组件无法访问到父组件中的 `data` 数据和 `methods` 中的方法。 可以通过属性绑定(v-bind)的方式将需要传递给子组件的数据从父组件传入。然后在子组件中通过 `props` 属性进行定义即可。 例如: ```javascript var vm = new Vue({ el: #app, data: { mymsg: 123 }, methods:{}, components:{ childcom: ``` 这里展示了一个简单的例子,说明如何在父组件中通过 `v-bind` 将数据传递给子组件,并且子组件可以通过定义 `props` 来接收这些数据。
  • 不同窗体使dataGridView控件
    优质
    本文将详细介绍在Windows Forms应用程序中,如何实现DataGridView控件跨窗体的数据传递方法与技巧。 该程序实现了不同窗体dataGridView之间的数据传递,通过数据绑定实现(假设Form2中的数据要传递到Form1中)。
  • Android
    优质
    本文将介绍在Android开发中页面之间如何高效、安全地进行数据传递的方法和技巧,帮助开发者优化应用性能。 演示了在Android系统中页面跳转以及页面间传递值的方法,并介绍了Intent的使用方法。
  • Flutter返回
    优质
    本文介绍了在使用Flutter进行移动应用开发时,如何有效地在不同的页面之间传递和返回数据的方法与技巧。 在使用Flutter进行页面返回传值时需要注意以下几点:首先,在跳转到新页面的方法体前要添加`async`关键字修饰符,例如定义一个异步方法如下: ```swift void skipPage(BuildContext context) async { } ``` 其次,当执行跳转动作时需要加上`await`关键字来调用带有`async`标记的函数。具体来说,在实际代码中可以这样写: ```javascript final result = await Navigator.push(context, MaterialPageRoute(builder: (context) => PageA())); ``` 最后一点是返回页面并传递数据,可以通过Navigator.pop方法实现如下所示: ```swift Navigator.pop(context, 我是返回的数据); ``
  • Session
    优质
    本文介绍了如何在网页开发中于不同Session页面之间传递数据的方法和技巧,帮助开发者实现更流畅的用户体验。 学习资料不错,希望可以学得更好。Session的作用非常重要。
  • 使HTML5window.postMessage进行跨域通信
    优质
    本文介绍了如何利用HTML5的window.postMessage API实现不同源框架间的安全数据交换,讲解了其基本用法及注意事项。 由于您提供的博文链接未能直接展示文字内容或具体内容要求进行改写的段落,请提供需要重新撰写的特定文本或者详细描述想要改动的内容概要,这样我才能更准确地完成您的请求。如果可以的话,请复制并粘贴您希望重写的具体句子或段落给我。
  • Android 中为使 Fragment.setArguments(Bundle bundle)
    优质
    本文探讨了在Android开发中使用Fragment时,通过setArguments方法传递Bundle对象来传送参数的最佳实践和原理。 在Android开发过程中,Fragment扮演着应用程序界面组件化的重要角色。自API级别11(即Android 3.0)引入以来,它已成为处理多屏幕适配及构建复杂用户交互的关键部分。然而,在使用Fragment时的一个常见问题是:如何有效地传递参数给Fragment实例。 直接通过构造方法传递参数看似直观且简单,但实际上存在一些潜在问题。例如,当设备从横屏切换到竖屏或反之亦然时,Android系统会销毁并重新创建Activity及其包含的Fragment以保持状态的一致性。在这种情况下,如果使用的是无参构造函数来重建Fragment,则之前通过构造方法传递的所有参数都将丢失。 为了解决上述问题,官方推荐采用`setArguments(Bundle bundle)`的方式来设置和传递参数给Fragment实例。这种方法允许我们将需要的配置信息封装进一个Bundle对象中,并将其附加到新创建的Fragment上。当系统在后续生命周期事件(如屏幕方向变化)重建Fragment时,可以通过检查保存的状态来恢复之前设定的所有必要数据。 具体来说,在`FramentTest2Activity`示例代码里可以看到通过调用静态工厂方法`newInstance(param)`的方式实现这一过程:该方法不仅创建了一个新的Fragment实例,还立即为其设置了参数。这样做的好处在于即使在系统重建Fragment时也能确保传递的参数得以正确保留。 采用这种方式的好处包括但不限于: 1. **状态恢复能力**:当Activity由于配置更改而被重新构建时,通过`savedInstanceState`可以完整地恢复之前设置的所有Bundle数据。 2. **线程安全性**:与直接调用构造方法不同的是,使用`setArguments()`可以在非UI线程中安全执行。这对于异步操作过程中传递参数尤其有用。 3. **类型支持性**:借助于Bundle对象提供的多种序列化机制(如putString(), putInt()等),可以方便且高效地处理各种类型的输入数据。 4. **设计模式遵循**:利用静态工厂方法创建Fragment实例符合单例和依赖注入的设计原则,有助于提高代码的组织性和可维护性。 5. **未来灵活性**:由于Bundle支持动态添加键值对的能力,在后续开发过程中能够轻松扩展或调整传递给Fragment的数据结构。 总而言之,使用`setArguments(Bundle bundle)`是官方推荐的最佳实践方案。它不仅确保了在各种生命周期事件中保持参数的一致性和准确性,还为代码的组织和未来的发展提供了更大的灵活性和可能性。因此,在实际项目开发时应优先考虑这种方法来处理Fragment间的参数传递问题。
  • JSP使Request和Session
    优质
    本文介绍了在Java Web开发中,如何通过HttpServletRequest对象及HttpSession对象在不同的JSP页面之间传递数据的方法与应用场景。 在JSP页面之间使用request或session传递值。例如,在session1.jsp页面从表单输入用户名,并将该参数传递到session2.jsp。