none
急求解!!!JavaScript中如何使用IHTMLWindow2接口??? RRS feed

  • 问题

  • 关于IHTMLWindow2我不是很理解,具体有什么用途。
    JavaScript中如何使用?
    请高手解答,谢谢!!!
    急!!!

    源于碰到js问题,microsoft提供的解决方法.
    http://support.microsoft.com/kb/904947/zh-cn

    要变通解决此问题,使用 web 浏览器 基于控件的应用程序。当主机 Internet 资源管理器 Web 对象控件 (WebOC) 时,可以使用 IHTMLWindow2::resizeTo 方法或 IHTMLWindow2::moveTo 方法调整窗口大小
    2012年6月11日 14:25

答案

  • 不客气,这个问题我是这么理解的,IHTMLWindow2 这个接口是ie提供的扩展,这个应该是COM,ie内部执行javascript的操作在本质上应该也是调用这个接口,c#或者c++在使用WebBrowser控件应该也是对这个的调用,虽然可能用了不同的类名。

    突然想到了另一种方式,你可以试试能不能用ie浏览器插件来使用这个接口,那样的话应该就相当于本地调用了,否则不可能在b/s中使用


    2012年6月14日 5:35

全部回复

  • Hi,

      关于IHTMLWindow2的接口你可以看http://msdn.microsoft.com/en-us/library/aa741505(v=vs.85).aspx ,其实它是属于COM 组件的一个接口用于对IE进行扩展的,本身很多IE的扩展功能都是通过C++调用com来实现,比如BHO,改变窗口缩放大小以及另外一些操作DOM元素.C#有个COM互操作的机制,用的CCW来解析C++的com接口,相当于CCW起着桥梁的作用。

      Sincerely,

      Jason Wang


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月12日 7:01
  • Hi,

      关于IHTMLWindow2的接口你可以看http://msdn.microsoft.com/en-us/library/aa741505(v=vs.85).aspx ,其实它是属于COM 组件的一个接口用于对IE进行扩展的,本身很多IE的扩展功能都是通过C++调用com来实现,比如BHO,改变窗口缩放大小以及另外一些操作DOM元素.C#有个COM互操作的机制,用的CCW来解析C++的com接口,相当于CCW起着桥梁的作用。

      Sincerely,

      Jason Wang


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    谢谢您的回复。

    那按照上面说法,javaScript中是不是不能使用IHTMLWindow2接口?

    如果可用,如何使用?谢谢!

    2012年6月12日 14:49
  • Hi LJG1119,

      可以的,Javascript只是脚本语言,它能做的同样用这个接口也能操作DOM和BOM对象模型。

     


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月13日 2:04
  • Hi LJG1119,

      可以的,Javascript只是脚本语言,它能做的同样用这个接口也能操作DOM和BOM对象模型。

     


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    Jason Dot Wang:

    很感谢你的回复~~

    Javascript怎么使用IHTMLWindow2接口,我还是不会,你能否举个Javascript使用例子(代码简单写下)?

    很抱歉添麻烦了。。。

    例如:

    A.html中 window.open(error.html,,,)

    error.html需要使用IHTMLWindow2::resizeTo改变窗口大小。


    • 已编辑 LJG1119 2012年6月13日 4:30 格式修改
    2012年6月13日 4:30
  • 原文的解释是这样的

    To work around this issue, use a WebBrowser control-based application. When you host the Internet Explorer Web Object Control (WebOC), you can use theIHTMLWindow2::resizeTo method or the IHTMLWindow2::moveTo method to resize the window.

    原文见http://support.microsoft.com/kb/904947/

    机器翻译不准确

    2012年6月13日 5:25
  • 换句话说,如果想在浏览器上实现是不行的,但是可以在浏览器控件中使用,这个是出于安全上的考虑
    2012年6月13日 5:28
  • 换句话说,如果想在浏览器上实现是不行的,但是可以在浏览器控件中使用,这个是出于安全上的考虑

         RUIQING ZHANG:

        谢谢!

        javascript中需要具体怎么解决呢?(想直接用try-catch抛出异常,但是客户认为微软提供了标准方法,不让用try-catch。用微软提示的IHTMLWindow2::resizeTo)

        如何使用浏览器控件?如何使用IHTMLWindow2::resizeTo方法?

    2012年6月13日 6:09
  • 1. IHTMLWindow2::resizeTo   这个接口提供的是对IE的API的访问 ,在js中可以认为window对象实现了这个接口,也就是对应了window.resizeTo(...)方法。出于安全性上的考虑,ie禁止了浏览器端脚本对本地窗口的操作,所以resizeTo方法会报错

    2. WebBrowser是WinForm的控件,也就是在本机程序中使用的,从这里访问的地址都应该是开发者指定的,应该能保证安全,所以开放了resizeTo等方法。

    从官方的解释来看,应该能这么理解这个问题

    2012年6月13日 7:45
  • 1. IHTMLWindow2::resizeTo   这个接口提供的是对IE的API的访问 ,在js中可以认为window对象实现了这个接口,也就是对应了window.resizeTo(...)方法。出于安全性上的考虑,ie禁止了浏览器端脚本对本地窗口的操作,所以resizeTo方法会报错

    2. WebBrowser是WinForm的控件,也就是在本机程序中使用的,从这里访问的地址都应该是开发者指定的,应该能保证安全,所以开放了resizeTo等方法。

    从官方的解释来看,应该能这么理解这个问题

    谢谢说明:

    关于上面的理解,我想大概也是如zhang同学所讲。。。

    1.对于1我有个疑问。

    参照以上理解,js中使用window对象等价于IHTMLWindow2这个API接口,为什么微软提供了IHTMLWindow2::resizeTo 作为解决方法呢。zhang同学那边能理解吗?

    哎,现在用户就揪着这个不放。

     针对这种情况js中这个问题没办法通过IHTMLWindow2::resizeTo类似方法解决了?

    2.例如类似winForm的控件,我能在js中用吗,还是必须通过类似C++/C#实现?

    一次次提问,麻烦了。。。

    谢谢!

    2012年6月13日 10:46
  • 不客气,这个问题我是这么理解的,IHTMLWindow2 这个接口是ie提供的扩展,这个应该是COM,ie内部执行javascript的操作在本质上应该也是调用这个接口,c#或者c++在使用WebBrowser控件应该也是对这个的调用,虽然可能用了不同的类名。

    突然想到了另一种方式,你可以试试能不能用ie浏览器插件来使用这个接口,那样的话应该就相当于本地调用了,否则不可能在b/s中使用


    2012年6月14日 5:35