postmessage

postMessage的使用及BUG

帅比萌擦擦* 提交于 2020-03-17 09:22:14
某厂面试归来,发现自己落伍了!>>> postMessage的使用及BUG postMessage 是 html5 的一个新功能,它是实现 跨域通信 的一种安全的策略,通过 postMessage 方式发送数据,通过在父子窗口添加onmessage事件进行监听,获取发送的数据,非常方便。 来源: oschina 链接: https://my.oschina.net/u/133179/blog/84586

HTML5 postMessage 跨域交换数据

帅比萌擦擦* 提交于 2020-03-17 09:21:06
某厂面试归来,发现自己落伍了!>>> 今天我们来学习一下HTML5的api,利用postMessage来跨域交换数据。和前面一些方式交换数据方式不同的是,利用postMessage 不能和服务端交换数据 , 只能在两个窗口(iframe)之间交换数据 ,废话不多说,我们直接进入实战。 实战postMessage overview   上文中说,postMessage是用于两个窗口(iframe)之间交换数据的,如果我们同时打开着百度和谷歌两个页面,是不是说这两者之间就可以通信了?No,no,no,事实并非如此,就算百度和谷歌俩页面有通信的意愿也不行。 两个窗口能通信的前提是,一个窗口以iframe的形式存在于另一个窗口,或者一个窗口是从另一个窗口通过window.open()或者超链接的形式打开的(同样可以用window.opener获取源窗口) ;换句话说,你要交换数据,必须能获取目标窗口(target window)的引用,不然两个窗口之间毫无联系,想通信也无能为力。   既然是H5家族的,我们也得观望下它被广大浏览器的接受程度,可以看到接受程度还是相当高的:   而postMessage的使用方式也相当简单: otherWindow.postMessage(message, targetOrigin, [transfer]);   otherWindow是对接收方窗口的引用

javascript:Web Worker

五迷三道 提交于 2020-03-15 20:39:55
原文章: https://wangdoc.com/javascript/index.html Web Worker 概述 JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增强,尤其是多核 CPU 的出现,单线程带来很大的不便,无法充分发挥计算机的计算能力。 Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。在主线程运行的同时,Worker 线程在后台运行,两者互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。这样的好处是,一些计算密集型或高延迟的任务可以交由 Worker 线程执行,主线程(通常负责 UI 交互)能够保持流畅,不会被阻塞或拖慢。 Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用,而且一旦使用完毕,就应该关闭。 Web Worker 有以下几个使用注意点。 (1) 同源限制 分配给 Worker 线程运行的脚本文件,必须与主线程的脚本文件同源。 (2) DOM 限制 Worker 线程所在的全局对象

window.open之postMessage传参数

 ̄綄美尐妖づ 提交于 2020-03-10 01:08:37
这次要实现一个window.open打开子视窗的同时传参数到子视窗,关闭的时候返回参数。 当然简单的做法非常简单,直接在window.open的URL之后接参数即可,但是毕竟get method的参数长度受浏览器的限制,一般从2KB到8KB。 除了get之外,还可以用window.postMessage(), 参考下面的case演示。 主视窗HTML如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Insert title here</title> 6 <script src="js/jquery-3.1.1.min.js" type="text/javascript"></script> 7 <script type="text/javascript"> 8 9 function openWin() { 10 var params = new Array(); 11 params[0] = new Array("CL1", "milo test"); 12 params[1] = new Array("CL2", "Taipei"); 13 14 var popupwin = window.open("popup.jsp", "Map", "status=0,title=0

c# invoke和begininvoke方法

冷暖自知 提交于 2020-03-07 23:35:32
转: http://wenku.baidu.com/view/b8677b18ff00bed5b9f31dbb.html 在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔: 一、 为 什 么 Control 类 提供了 Invoke 和 BeginInvoke 机制? 关于这个问题的最主要的原因已经是dotnet程序员众所周知的,我在此费点笔墨再次记录到自己的日志,以便日后提醒一下自己。 1 、 windows 程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着一个消息泵。这个消息泵让windows程序生生不息。 Windows GUI程序的消息循环 Windows程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源。这里的while循环使用了GetMessage()这个方法,这是个阻塞方法,也就是队列为空时方法就会被阻塞,从而这个while循环停止运动,这避免了一个程序把cpu无缘无故地耗尽,让其它程序难以得到响应。当然在某些需要cpu最大限度运动的程序里面就可以使用另外的方法,例如某些3d游戏或者及时战略游戏中,一般会使用PeekMessage()这个方法,它不会被windows阻塞,从而保证整个游戏的流畅和比较高的帧速。 这个主线程维护着整个窗体以及上面的子控件

MessageChannel 实现worker之间的通信

一笑奈何 提交于 2020-03-06 11:49:46
https://developer.mozilla.org/zh-CN/docs/Web/API/MessageChannel node中使用 const {MessageChannel} = require('worker_threads') const channel = new MessageChannel(); const port1 = channel.port1; const port2 = channel.port2; port1.onmessage = function (event) { console.log("port1收到来自port2的数据:" + event.data); } port2.onmessage = function (event) { console.log("port2收到来自port1的数据:" + event.data); } port1.postMessage("发送给port2"); port2.postMessage("发送给port1"); // port2收到来自port1的数据:发送给port2 // port1收到来自port2的数据:发送给port1 https://developer.mozilla.org/zh-CN/docs/Web/API/Worker/postMessage

Delphi: application running as admin does not receive messages from non-admin app

ε祈祈猫儿з 提交于 2020-03-05 04:05:45
问题 I want to send messages to another application, using SendMessage/PostMessage, but when the other app is running as admin it never receives the messages. How can I overcome this without running the "sending" app as admin? EDIT: code for Remi's answer, receiver app Const dummyValue = WM_USER + 71423; Application.HookMainWindow(AppClass.AppHookFunc); ChangeWindowMessageFilter(dummyValue, MSGFLT_ADD); Type TAppClass = class function AppHookFunc(var Message : TMessage): Boolean; end; Var AppClass

Delphi: application running as admin does not receive messages from non-admin app

做~自己de王妃 提交于 2020-03-05 04:05:00
问题 I want to send messages to another application, using SendMessage/PostMessage, but when the other app is running as admin it never receives the messages. How can I overcome this without running the "sending" app as admin? EDIT: code for Remi's answer, receiver app Const dummyValue = WM_USER + 71423; Application.HookMainWindow(AppClass.AppHookFunc); ChangeWindowMessageFilter(dummyValue, MSGFLT_ADD); Type TAppClass = class function AppHookFunc(var Message : TMessage): Boolean; end; Var AppClass

跨域打开页面:Uncaught DOMException: Blocked a frame with origin

两盒软妹~` 提交于 2020-02-28 15:30:42
Uncaught DOMException: Blocked a frame with origin 使用postMessage()方法可以解决跨域传值的问题 Api: https://developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage 父页面: layer.open({ skin: 'rocket', scrollbar: false, type: 2, title: 'test', shadeClose: true, area: ['50%', '50%'], content: url,//iframe的url btn:['保存'], btnAlign: 'c', yes: function(index, layero){ window[layero.find('iframe')[0]['name']].postMessage('addAndEdit', '*'); layer.close(index); }, cancel: function(index, layero){ window[layero.find('iframe')[0]['name']].postMessage('addAndEdit', '*'); layer.close(index); } }); function

跨文档消息传递 postMessage

孤人 提交于 2020-02-27 05:09:58
一、跨文档消息传递 1. postMessage 发送信息 向当前页面的 <iframe> 元素传送数据 // 接收方window对象.postMessage( "message", "接收方域名" ); var iframeWindow = document.getElementById("myframe").contentWindow; //contentWindow iframeWindow.postMessage("a secret","http://www.wrox.com"); //向内嵌框架发送消息 接收信息 该方法触发接收方 window 对象的 message 事件,并且传递个 onmessage处理程序的 event 包括以下三方面信息 data:postMessage()第一个参数传过来的 message,最好只传字符串 (结合: JSON.stringify(), JSON.parse() ) origin: 发生消息的文档所在的域 source: 发送消息的文档的 window对象 代理 //接收到其他窗口发送过来的信息 window.addEventListener("message", function(event){ event.source.postMessage("收到",event.origin) //向原窗口发送回执 }) 2. 例子 外层