postmessage

iframe中子父页面跨域通讯

廉价感情. 提交于 2020-02-24 21:59:21
目录 #跨域发送信息 #跨域接收信息 #示例Demo 在非跨域的情况下,iframe中的子父页面可以很方便的通讯,但是在跨域的情况下,只能通过 window.postMessage() 方法来向其他页面发送信息,其他页面要通过 window.addEventListener() 监听事件来接收信息; #跨域发送信息 #window.postMessage()语法 otherWindow.postMessage(message, targetOrigin, [transfer]); otherWindow 其他窗口的一个引用,写的是你要通信的window对象。 例如:在iframe中向父窗口传递数据时,可以写成window.parent.postMessage(),window.parent表示父窗口。 message 需要传递的数据,字符串或者对象都可以。 targetOrigin 表示目标窗口的源,协议+域名+端口号,如果设置为“*”,则表示可以传递给任意窗口。在发送消息的时候,如果目标窗口的协议、域名或端口这三者的任意一项不匹配targetOrigin提供的值,那么消息就不会被发送;只有三者完全匹配,消息才会被发送。例如: window.parent.postMessage('hello world',' http://xxx.com:8080/index.html ')

关闭ShowDialog的模态窗口

人盡茶涼 提交于 2020-02-21 14:05:52
[DllImport("user32.dll")] private static extern IntPtr FindWindow(string a, string b); [DllImport("user32.dll")] private static extern IntPtr PostMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); Timer timer = new Timer(); timer.Tick += (obj, arg) => { //1、尝试关闭ColorDialog IntPtr ptr1 = FindWindow(null, "颜色"); if (ptr1 != IntPtr.Zero) { PostMessage(ptr1, 0x0010, IntPtr.Zero, IntPtr.Zero); SetInfoBar("ColorDialog已关闭"); } //2、尝试关闭FolderBrowserDialog IntPtr ptr2 = FindWindow(null, "浏览文件夹"); if (ptr2 != IntPtr.Zero) { PostMessage(ptr2, 0x0010, IntPtr.Zero, IntPtr.Zero); SetInfoBar(

HTML5中的跨文档消息传递

て烟熏妆下的殇ゞ 提交于 2020-02-18 20:33:18
跨文档消息传送(cross-document messaging),有时候也简称为XDM,指的是来自不同域的页面间传递消息。例如,www.w3cmm.com域中的一个页面与一个位于内嵌框架中的p2p.w3cmm.com域中的页面通信。在XDM机制出现之前,更稳妥地实现这种通信需要花很多功夫。XDM把这种机制规范化,让我们能既稳妥有简单地实现跨文档通信。 XDM的核心是postMessage()方法。在HTML5规范中,除了XDM部分之外的其它部分也会提到这个方法名,但都是为了同一个目的:向另一个地方传递数据。对于XDM而言,“另一个地方”指的是包含在当前页面中的<iframe>元素,或者由当前页面弹出的窗口。 postMessage()方法接收两个参数:一条消息和一个表示消息接收方来自哪个域的字符串。第二个参数对保障安全通信非常重要,可以防止浏览器把消息发送到不安全的地方。来看下面的例子。 var iframWindow = document.getElementById("myframe").contentWindow; iframWindow.postMessage("A secret", "http://www.w3cmm.com"); 最后一行代码尝试向内嵌框架中发送一条消息,并指定框架中的文档必须来源于“http://www.w3cmm.com”域。如果来源匹配

跨页面通信postMessage和onmessage

烈酒焚心 提交于 2020-02-18 07:35:14
简介 通常,对于两个不同页面的,只有当它们位于同协议、同域名、同端口时,才可以通信。而window.postMessage() 方法可以安全地实现跨源通信。 语法 发送: otherWindow . postMessage ( message , targetOrigin , [ transfer ] ) ; otherWindow 其他窗口的一个引用,比如iframe的contentWindow属性、执行window.open返回的窗口对象,或者父窗口的引用 window.opener message 将要发送到其他 window的数据,可以是字符串也可以是对象。 targetOrigin origin属性可以指定哪些窗口能接收到消息事件,格式为:协议+域+端口,如果设为 “*” 表示无限制,为了安全最好别设置为 “ * ” 接收: window . onmessage = function ( e ) { console . info ( "received msg: " + e . data ) ; console . info ( "received msg: " + e . origin ) ; console . info ( "received msg: " + e . source ) ; } data 传过来的数据 origin 发送方窗口的origin

用自定义消息在线程间通信(VC)

房东的猫 提交于 2020-02-05 14:12:29
在多线程的程序中,有时需要在子线程中使用UpdateData()函数对主窗口进行更新,但是在子线程里调用UpdateData()函数是行不通的,这就需要使用自定义消息来进行线程间的通信,在此记录怎么使用自定义消息。 在Visual C++中提供了WM_USER,比它大的整数可以由用户使用,比它小的整数由系统保留。   自定义消息处理的过程如下:   1、声明一个全局的常量,代码如下:     const WM_xxx = WM_USER + N;     其中,WM_xxx表示自定义的消息名,N是正整数。   2、在对话框的头文件中DECLARE_MESSAGE_MAP()的前面添加下列语句:     //{{AFX_MSG(CXXXDlg)     ...     afx_msg LONG OnXXXX(WPARAM wParam, LPARAM lParam); //消息处理函数的声明,OnXXXX可自行命名     ...     //}}AFX_MSG     DECLARE_MESSAGE_MAP()   3、切换到对话框类的实现文件中,在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加消息映射代码:     BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)     //{{AFX_MSG_MAP(CQQDlg)     

搜狗c++面试

懵懂的女人 提交于 2020-02-05 03:46:46
1. 是否所有的线程都可以接收Windows消息 2. SendMessage,PostMessage,SendNotifyMessage 的区别 3. Windows的消息id范围是什么,自定义的消息id可以任意给定值吗 4. 当窗口在处理消息的过程中,如果有另一个线程在处理完成前,PostMessage(消息1),然后SendMessage(消息2),然后PostMessage(消息3),当前的消息处理完成后,消息123的处理顺序是什么 5.Windows处理sendmessage的消息和处理postmessage消息有什么不同 6.new一个int数组但是delete不是数组有没有问题,如果是对象呢 7.stl的map里面用的什么存储 8.map的key如果是自定义类型,只能比较小于<时如何判断key相等 9.dll里申请的内存,可以在调用它的exe里释放吗 10.postmessage会丢失,但是sendmessage不会丢失 11.编译和链接会做什么 12.多个头文件可以同时编译吗 13.多态的虚指针和虚表,虚指针是什么时候生成的,虚表存在哪儿 14.全局变量不初始化和初始化,以及在main函数初始化的区别,对程序大小的影响 15.stdcall的作用(调用约定,主要决定参数入栈顺序) 16.windows和ui相关的接口,跨进程通信 17.docker的优势 18

iframe与宿主页面的通信问题

你说的曾经没有我的故事 提交于 2020-01-29 06:58:33
1. 利用 sessionStorage 进行相对安全的通信(localStorage) 保存数据语法: sessionStorage.setItem("key", "value"); 读取数据语法: var lastname = sessionStorage.getItem("key"); 删除指定键的数据语法: sessionStorage.removeItem("key"); 删除所有数据: sessionStorage.clear(); 2. postMessage 子向父通信 // iframe 页面 发消息 window . parent . postMessage ( { msg : "xxx" } , '*' ) ; // 父页面 收消息 window . addEventListener ( 'message' , function ( res ) { console . log ( res . data . msg ) ; } ) ; 父向子通信 // 父页面 发消息 var myframe = document . getElementById ( 'myframe' ) ; //获取iframe myframe . contentWindow . postMessage ( { data : 'parent' } , childDomain ) ; /

解决跨域(三)---postMessage

妖精的绣舞 提交于 2020-01-29 06:42:10
postMessage原理及实现 HTML5为了解决跨域的问题,引入了一个全新的API;跨文档通信API(Cross-document messaging)。这个API为window对象新增了一个window.postMessage方法,允许跨窗口通信,不论这两个窗口是否同源。postMessage是h5新增的方法,postMessage可以实现跨文档消息传输(Cross Document Messaging),Internet Explorer 8, Firefox 3, Opera 9, Chrome 3和 Safari 4都支持postMessage。 该方法可以通过绑定window的message事件来监听发送跨文档消息传输内容。 语法 otherWindow . postMessage ( message , targetOrigin , [ transfer ] ) ; otherWindow:其他窗口的一个引用,比如iframe的contentWindow属性、执行window.open返回的窗口对象、或者是命名过或数值索引的window.frames。 message 将要发送到其他window的数据。它将会被结构化克隆算法序列化。这意味着你可以不受什么限制的将数据对象安全的传送给目标窗口而无需自己序列化。

【worker】js中的多线程

时光总嘲笑我的痴心妄想 提交于 2020-01-27 17:01:06
因为下个项目中要用到一些倒计时的功能,所以就提前准备了一下,省的到时候出现一下界面不友好和一些其他的事情。正好趁着这个机会也加深一下html5中的多线程worker的用法和理解。 Worker简介 JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。这些都是我们所公知的。但是随着业务的不断增加,只是单纯的单线程模式已经可能无法满足我们的需求了。于是在html5中新增了后台任务worker API。 w3c中的介绍:web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。 worker就是为了JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。开启后台线程,在不影响前台线程的前提下做一些耗时或者异步的操作。因为是不同的线程,所以主线程与worker线程互不干扰。也不会相互打断。所以在一些场景可以提高页面的流程性。Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用

webWorker

左心房为你撑大大i 提交于 2020-01-27 02:53:02
一、webWorker之初体验 在 "setTimeout那些事儿" 中,说到JavaScript是单线程。也就是同一时间只能做同一事情。 也好理解,作为浏览器脚本语言,如果JavaScript不是单线程,那么就有点棘手了。比如,与用户交互或者对DOM进行操作时,在一个线程上修改某个DOM,另外的线程删除DOM,这时浏览器该如何抉择呢? 所以,JavaScript是单线程也是有背景的。 如下: <!DOCTYPE html> <head> <title>singleThread</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <script> //添加到任务队列中,待同步任务所处的‘执行栈’执行完毕,1秒后执行任务队列中的这个匿名函数 setTimeout(function(){ console.log('come on'); },1000); //只要不关闭该alert,‘执行栈’就没结束,从而也就不会进入到任务队列中 alert('waiting'); </script> </body> </html> 但, HTML5引入了一个 工作线程(webWorker) 的概念。它允许开发人员编写能够长时间运行而不被用户所中断的后台程序