我用MFC的ActiveX创建了一个控件,且嵌入到了网页中去调用,现在我想请教下,如何主动的通知控件退出,执行结果像网页页面关闭一样。
比如我希望我的控件在运行1分钟后就退出还有就是控件退出了是不是网页页面也跟着关闭了,如果不是的话该如何使网页页面也关闭。

解决方案 »

  1.   

    用个定时器呢,或者用OnTimer函数试试
      

  2.   

    用个定时器或者用个OnTimer函数试试
      

  3.   

    1分钟之后你Fire个Event然后js去响应这个Event  然后window.close
      

  4.   

    1分钟之后你Fire个Event然后js去响应这个Event  然后window.close
      

  5.   

    奇怪了,我这帖子是咋回事,csdn在搞什么鸟,我自己也看不到你们的回复,非得按结贴才能看得到请教下,这个要咋发生Event让JS相应
      

  6.   

    js:<object clsid.............>
    <script .....>
    function OnEvent(...)
    {}
    ....VC:
    ***->FireEvent(.....)
      

  7.   

    嗯,楼上正解,我昨天试了下可以,但是不知道咋回事我在360浏览器的分页模式下开了一个OCX,然后开另外一个的时候通过共享内存通知第一个触发消息InvokeClose()给js调用,js中响应后执行window.close(),但是会问题。我在想是不是因为我htm中指定的“<object ID="MyOCX"...”和“<script for="MyOCX" language="JavaScript" event="InvokeClose()">”是同一个的关系,js的不是很了解请教下有没有谁遇到这种问题的
      

  8.   


    除了360浏览器会重新再开一个新的以外,其它的浏览器都是不会重新启动,只会用原先的。也就是说只有360的会再次重新调用InitInstance()来初始化,然后在调用构造函数;
    但是其他浏览器都是不会重新调用InitInstance(),而是直接调用了构造函数COCXDemoCtrl::COCXDemoCtrl()(其中class COCXDemoCtrl : public COleControl)这到底是怎么回事?这种情况下该如何处理,当然如果不是用分页情况而是重新开个浏览器来打开肯定是没有问题的。
      

  9.   

    ActiveX控件创建出来了的话, 你可以在JS中获取到它啊
    <object id='obj1' CLSID=>
    然后在JS中你可以调用它的任意方法了。 如: var obj = document.getElementById('obj1').object; obj.Close();
      

  10.   


    嗯你好,那我该如何关闭页面呢,其实我没干别的事情就是要关闭触发事件的当前页面,一定要用window.close()来关闭吗?(我对js编程一知半解)后面经过认真仔细的测试发现跟进程有关系,就是360浏览器一般都是开启的页面如果达到10个则会重新再创建一个进程,故我发现如果我的ocx是开在不同进程的话,则我的close调用后无效超级无奈,到底为啥?360咋这么多猫腻,世界之窗浏览器经测试是没有问题的,不管是不是开在同一个进程
      

  11.   

    这个我知道,关键是不知道360浏览器5.0版本的升级修改了什么东西,导致我调用window.close关闭不了<script for="MyOCX" language="JavaScript" event="InvokeClose()">
    function goHome()
    {
       window.opener = "";
       window.open("","_self");
      window.close();
    }
    goHome()
    </script>如果是4.0版本的话,则可以关闭,具体情况是这样的,360浏览器打开第一个页面的时候任务管理器里面只有一个360se.exe进程,第二个则是另外开了个进程。
    我的代码本来是如果打开了同一个ocx则会触发消息(FireEvent(eventidInvokeClose, EVENT_PARAM(VTS_NONE));)通知js退出第一个,但是发现如果第二个是在另外一个进程打开的话则调用window.close();关闭不了页面具体的话大家可以弄个工程试试,或者方便的话留个邮箱我发下代码,代码很简单,都是向导新建的,只是增加了一个event给js调用
      

  12.   

    你确认如果第二个是另外进程中的, 会触发第一个的Close事件吗? 你如何确认的
      

  13.   

    不是,我的意思是说事件是肯定有触发的:
    <script for="MyOCX" language="JavaScript" event="InvokeClose()">
    function goHome()
    {
      //测试代码1:
      document.write("360XXXX");  // 这个事有执行的
      //测试代码2:
      MyOCX.Runinit("360还XXX");  // 这个也是有执行的,Runinit是控制自定义的一个调度接口   window.opener = "";
      window.open("","_self");
      window.close();            // 这个不晓得它执行了吗?怎么看?
    }
    goHome()
    </script>
      

  14.   

    建议你用alert看看window.close有没有执行
    即在close前后加上alert;
      

  15.   

    感谢大家,特别感谢下yangxingyu实在搞不懂360浏览器咋回事,困扰了很久了,我最后使用了页面跳转来解决