关于Activex退出问题
前段时间用MFC的ActiveX做了个控件嵌入到网页中,网页中也已经可以响应ActiveX的消息。但是现在出现了个问题
拿360浏览器来说吧:
我先打开htm调用了ocx,然后再次打开该htm调用同一个ocx时,此时发现有2个情况会出现:
由于360浏览器在页面被打开超过10个的时候就会重新创建一个进程,故如果:
1.再次打开的ocx和第一个在同一个进程,则初始化函数InitInstance()不会被重新调用,而是直接调用了控件类的构造函
数CMyCtrl()
2.再次打开的ocx和第一个不在同一个进程,则初始化函数InitInstance()被重新调用,然后在调用控件类的构造函数
这样就出现了个问题,我在打开第二个ID相同的ocx时,第一个OCX会触发一个事件InvockClose()给js调用,js检查到该事件触发,则调用window.close()关闭页面。
这样如果是第1种情况则没有问题,但是如果是第2种情况则不行,window.close()调用了没有效果,但是事件是肯定有触发的,因为我掉了一个ActiveX自定义的接口是有执行的。
htm中关于关闭的代码如下:
<script for="ActiveXDemo" language="JavaScript" event="InvokeClose()">
function goHome()
{
//测试事件:ActiveXDemo.Run("Test");
//关闭页面
window.opener = "";
window.open("","_self");
window.close();
}
程序部分代码如下:
// 激发关闭网页事件
void ActiveXDemo::FireInvokeClose()
{
FireEvent(eventidInvokeClose, EVENT_PARAM(VTS_NONE));
}
void ActiveXDemo::OnTimer(UINT_PTR nIDEvent)
{
if (...)
{
FireInvokeClose();
}
}
[解决办法]
可以用进程间通讯,命名事件什么的,让另外一个组件等待事件,然后触发事件让另外一个组件关闭,然后另外一个组件再进行事件等待
[解决办法]
ocx能兼容360 吗?