C++ ActiveX似乎是异步装载的
IE11。 我有一个带有一些API的ActiveX组件,还有一个位于ReactJS顶部的应用程序来使用它。考虑下一个反应组件代码:C++ ActiveX似乎是异步装载的,c++,reactjs,activex,C++,Reactjs,Activex,IE11。 我有一个带有一些API的ActiveX组件,还有一个位于ReactJS顶部的应用程序来使用它。考虑下一个反应组件代码: componentDidMount() { this.mountActiveX(); this.updateActiveX(); } mountActiveX() { this.refs.content.getDOMNode().innerHTML = ` <object classid='CL
componentDidMount() {
this.mountActiveX();
this.updateActiveX();
}
mountActiveX() {
this.refs.content.getDOMNode().innerHTML = `
<object
classid='CLSID:9F52F906-94D1-4E33-85E4-62A9A68EF545'
name="client"
ref="client"
></object>
`;
this._client = window["client"];
this._isMounted = true;
}
updateActiveX() {
if (this._client && this._isMounted) {
/* use ActiveX API here */
}
}
componentDidMount(){
这个.mountActiveX();
this.updateActiveX();
}
mountActiveX(){
this.refs.content.getDOMNode().innerHTML=`
`;
这个._client=window[“client”];
这个。_isMounted=true;
}
updateActiveX(){
如果(此客户端和此客户端已安装){
/*在这里使用ActiveX API*/
}
}
当我试图在updateActiveX
中调用某个ActiveX API方法时,IE会引发一个错误:无法创建顶级子窗口。
。但是,如果我延迟updateativex
方法(例如,由于setTimeout
),则没有错误,API可用
如何处理ActiveX组件装载?已解决-我曾用CSS类显示\hide ActiveX dependens
\u isMounted
标志:在React组件类的初始装载过程中,hide
被删除,紧接着componentDidMount
,调用了“udpateActix”和ActiveX API方法,我猜,浏览器并没有在页面上呈现完全同步的ActiveX外观-当调用ActiveX API时,控件仍然隐藏-这就是为什么无法创建顶级子窗口的原因。需要检查控制可见性。