当前位置: 首页 > Web前端 > JavaScript

无界微前端,子应用使用原生js绑定事件,获取e.target为空方案

时间:2023-03-26 21:23:53 JavaScript

我们在使用微前端的时候,不得不使用原生的js来绑定事件,而当我们想要获取当前绑定事件的dom时,发现e.target在微前端环境下是没有价值的,但是在微前端环境中放置e.target会变为null,导致后续操作失败,影响使用,可以使用以下方法解决。Problem:document.getElementById('rightMenu').onmouseleave=function(e){console.log(e.target)//在非微前端环境下,打印效果为:domofcurrentbindingevent//微前端环境打印效果为:null}解决方法:document.getElementById('rightMenu').onmouseleave=function(e){varcomposedTarget=(e.composed&&e.composedPath())vartarget=composedTarget[0]if(target){//你要处理的事件}else{console.error('targetnotgetting')}console.log(target)//非微前端环境打印效果为:thedomofthecurrentbindingevent//微前端环境下的打印效果为:domofthecurrentbindingevent}如果要区分是否是微前端环境,则使用不同的方法获取e.target,按照以下方法:找到当前微前端的shadowRoot(以无界微前端为例,其他微前端ntendenvironments:例如:Qiankun,MicroApp)//Unbounded:window.__POWERED_BY_WUJIE__,Qiankun:window.__POWERED_BY_QIANKUN__,MicroApp:window.__MICRO_APP_ENVIRONMENT__if(window.__POWERED_BY_WUJIE__){//这里我以无界微前端为例。其他微前端请参考如何获取shadowRootwindow。composedPath())vartarget=composedTarget[0]if(target){//你要处理的事件}else{console.error('targetnotobtained')}})}