在react外部静态页面获取并调用组件中元素绑定的方法

起因

源于扫码枪应用的后续,由于react好像无法支持oncomm方法,无奈只能继续使用iframe加载静态页面的方式获取串口数据,这就要求进行父子页面数据的传输。

后续

首先想到使用postMessage方法。在chrome上成功,但在ie上父页面却拿不到子页面传的数据(原因不太清楚,留个坑,诸位大佬若是知道请不吝赐教)
再想到跨页面调方法。父页面调用子页面方法没问题,因为子页面只是个简单页面,方法都绑定在window对象上;子页面调父页面元素绑定方法时显示没有绑定方法
在这里插入图片描述
因为react中元素的事件绑定方法无法直接在外部获取。
紧接着,发现react元素中比普通元素多了几个属性,使用Object.keys()获取得到
["__reactInternalInstance$2wxfat8xpfv", “__reactEventHandlers$2wxfat8xpfv”]
在react外部静态页面获取并调用组件中元素绑定的方法_第1张图片
在react外部静态页面获取并调用组件中元素绑定的方法_第2张图片

然后在__reactEventHandlers$2wxfat8xpfv里面惊喜的发现了元素的绑定事件,调用成功。
查资料发现__reactEventHandlers$2wxfat8xpfv中$符号后面为元素在react中的id,即__reactEventHandlers$,因此在调用方法的时候需要正确的属性名,id不知道该怎么获取,这里用了个笨方法,用正则去匹配,下面简单附上写的方法

function getReactMethod(ele){
 	Object.keys(ele).forEach(function(key){
 		if(/^__reactEventHandlers/.test(key)){
 			//TODO
 		}
 	})
 }

你可能感兴趣的:(react)