科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件让Internet Explorer成为你的软件集成平台(二)

让Internet Explorer成为你的软件集成平台(二)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

作为一款建立在COM基础之上的应用软件,IE系列提供了对COM技术的深度支持

作者:孙辉 来源:CSDN 2008年1月6日

关键字: 集成平台 explorer Internet Windows

  • 评论
  • 分享微博
  • 分享邮件
Microsoft Visual Basic 6.0是Microsoft的一个经典作品,尽管争议颇多,个人认为VB6是一个十分优秀的开发工具。做为一款1998年的产品,VB6至今还被许多人所喜爱,笔者就是其中之一。针对COM组件开发,VB6非常方便,但长期以来,VB6与IE插件开发却无缘无分,这一点多少有一些遗憾。作为一款建立在COM基础之上的应用软件,IE系列提供了对COM技术的深度支持,也许,这个支持的门槛过高,使得VB被拒之门外。
那么,能否建立VB6与IE开发之间的桥梁?一般而言,VB6可以十分方便的开发3类COM对象:1、简单的无UI COM对象;2、ActiveX控件;3、ActiveX Document对象。这几类对象中,前2类使用很广泛,第三种对象对一般开发者而言也许相对陌生,事实上,Microsoft的许多软件的插件往往是使用第三类对象,即基于VB的Active Document,例如Visual Studio IDE里的Tool Windows对象,就是一个典型的例子。选择这类对象,也许是因为ActiveX Document对象有完整的键盘消息控制能力。与MFC、ATL等相比,VB6的COM开发要简洁得多,例如,没有idl文件,触发事件的机制非常简单,连接事件的方式也十分清晰,VB6的“引用”机制,对COM开发的简化是无与伦比的,即使现在的.NET,也是延续早期VB的引用模式。建立IE与VB6之间的桥梁,基本是来自个人对VB6的一种偏爱,对此,也颇费苦心。从技术层面看,这个桥梁不单纯是为VB而建立的,而是针对两种极为重要的COM对象建立的,其一是ActiveX控件,另外一个就是Active Document。IE能够浏览.NET 3.0开发的WPF文档,就是采用Host ActiveX Document技术实现的。在VB环境内,开发一个Active Document非常容易,为此,我们建立一个支持VB ActiveX Document的DLL工程,取名为VBIEDoc:
经过编译后,我们得到一个已经注册的COM对象库,里包含一个ID为“VBIEDoc.IEDoc”的ActiveX Document对象。现在,我们有了一个很简单的IE“插件”了,为了能够看看这个插件如何被“裝入”IE,我们还需要一些处理工作,基本步骤如下:
1、 生产一个XML文件:
   <Tangram DocViewID="TangramLiteFormD.DocTemplate.1" DocObjID="" ExtDocObjID="TangramLiteFormExtenderD.docextender.1">
  <Window>
     <TangramNode Name="VBDoc" ID="VBIEDoc.IEDoc" CnnID="" Caption="" Width="866" Heigh="127" Tag=""></TangramNode>
  </Window>
  <TangramDoc></TangramDoc>
</Tangram>
2、 以这个XML文件为模板,用TangramDesigner生成一个xtml格式的XML文件,并将这个文件保存到一个指定的目录,建议保存到“Program Files\Tangram\BandFile”目录,这里,我们指定文件名为“testvb.xml”,并将这个文件存放在“Program Files\Tangram\BandFile”目录;
3、 在IE地址栏里输入“ie:l/l(testvb)”,我们看到如下界面:
如果输入:“ie:l/l(testvb)”我们将得到:
当然,这里得到的东西,内容是“空白”的,但我们已经成功地走过了第一步。
通过以上的步骤,我们看到,在UI级别上,类似VB6这样的工具产生的组件,是能够与IE对接的,那么,这种对接,能够与IE融合吗?以下,我们将向你展示,这种融合是完全可能的。为了实现与IE融合,我们需要所开发的对象有一个“属性”,这个属性名是:“TangramDoc”,利用VB的Wizard,很容易添加这个属性,代码如下:
Option Explicit
Dim WithEvents thisDoc As TangramLiteFormDLib.Document
Dim WithEvents thisWebBrowser As WebBrowser
 
Public Property Let TangramDoc(ByVal vNewValue As TangramLiteFormDLib.Document)
    Set thisDoc = vNewValue
    Set thisWebBrowser = thisDoc.AxObject("WebBrowser")
End Property
我们可以为文档上的button添加如下“动作”:
    Private Sub Command1_Click()
        thisWebBrowser.Navigate txtURL.Text
End Sub
重新编译上面的文档,并按上述步骤重新加载文档对象,为了测试关联性,可以在文档中输入一个URL,并按下按钮,也许你已经感觉到应该发生的事情了:
以上步骤表明,VB Document通过“引用”,可以自然地与IE交互操作,类似的,其它ActiveX控件以及ActiveX Document也可以以同样的方式实现与浏览器的UI级别的集成。
    一个比较有趣的问题是,如何组织多个VB Document(以及其它ActiveX对象)。为此,我们可以在如上的VB工程中,增加2个VB Document对象,分别命名为IEDoc1、IEDoc2,我们看如下XML描述:
<Tangram DocViewID="TangramLiteFormD.DocTemplate.1" DocObjID="" ExtDocObjID="TangramLiteFormExtenderD.docextender.1">
  <Window>
    <TangramNode Name="sp1" ID="TangramLiteTabWnd.CTangramLiteSplitterWnd" CnnID="TangramLiteTabWnd.TangramConnector" Caption="sp1" Width="" Heigh="" Tag="">
      <Row>
        <TangramNode Name="fm1" ID=" VBIEDoc.IEDoc" Width="866" Heigh="127" Tag=""></TangramNode>
      </Row>
      <Row>
        <TangramNode Name="fm2" ID=" VBIEDoc.IEDoc1" Width="866" Heigh="446" Tag=""></TangramNode>
      </Row>
    </TangramNode>
  </Window>
  <TangramDoc></TangramDoc>
</Tangram>
从描述上看,这个结构描述了一个2行1列的切分窗口,处于(1,1)位置的是ID=" VBIEDoc.IEDoc"的VB Document(你可以用其它ID值替换),处于(2,1)位置的是ID=" VBIEDoc.IEDoc1"的VB Document对象。我们可以用TangramDesigner生成对应的XTML文件,记为:testvb2.xtml,在IE地址栏里输入“ie:l/l(testvb2)”,你可以看到:
一旦多个VB对象(或者多个ActiveX)彼此可以关联,那么这些关联即可形成特定的应用。
    我们已经看到,ActiveX对象完全可以操作IE以及IE内部的DOM模型(通过引用技术,COM对象可以得到接口IHtmlDocument2,进而可以遍历DOM),那么,能否在DOM模型里操作外围的“插件”对象?这些插件对象,并不属于DOM对象集合,但由于这些对象的“多样性”,的确可能给IE提供大量的原本不具备的软件功能,一旦在“对象模型”上找到突破口,这种结合将急速促进桌面应用与Web应用相结合。我们将在以后的文章中陆续介绍如何将上述扩展对象有机的“融入”HTML的DOM模型,例如,这些对象可以与浏览器的脚本引擎完全的整合,脚本引擎可以自然的解释“外围”插件的事件,同时,外围插件也可以自如的处理HTML内部的各种操作
 
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    闂傚倸鍊搁崐椋庢閿熺姴鐭楅幖娣妼缁愭鏌¢崶鈺佷汗闁哄閰i弻鏇$疀鐎n亞浠炬繝娈垮灠閵堟悂寮婚弴锛勭杸閻庯綆浜栭崑鎾诲冀椤撱劎绋忛梺璺ㄥ櫐閹凤拷

    濠电姷鏁告慨鐑姐€傛禒瀣劦妞ゆ巻鍋撻柛鐔锋健閸┾偓妞ゆ巻鍋撶紓宥咃躬楠炲啫螣鐠囪尙绐為梺褰掑亰閸撴盯鎮惧ú顏呪拺闂傚牊鍗曢崼銉ョ柧婵犲﹤瀚崣蹇旂節婵犲倻澧涢柛瀣ㄥ妽閵囧嫰寮介妸褋鈧帡鏌熼挊澶婃殻闁哄瞼鍠栭幃婊堝煛閸屾稓褰嬮柣搴ゎ潐濞叉ê鐣濈粙璺ㄦ殾闁割偅娲栭悡娑㈡煕鐏炲墽鐭嬫繛鍫熸倐濮婄粯鎷呯粵瀣異闂佹悶鍔嬮崡鍐茬暦閵忋倕鍐€妞ゆ劑鍎卞皬闂備焦瀵х粙鎴犫偓姘煎弮瀹曚即宕卞Ο闀愮盎闂侀潧鐗嗛幊搴㈡叏椤掆偓閳规垿鍩ラ崱妞剧凹濠电姰鍨洪敋閾荤偞淇婇妶鍛櫤闁稿鍊圭换娑㈠幢濡纰嶉柣搴㈣壘椤︾敻寮诲鍫闂佸憡鎸鹃崰搴敋閿濆鏁嗗〒姘功閻绻涢幘鏉戠劰闁稿鎹囬弻锝呪槈濞嗘劕纾抽梺鍝勬湰缁嬫垿鍩為幋锕€宸濇い鏇炴噺閳诲﹦绱撻崒娆戝妽妞ゃ劌鎳橀幆宀勫磼閻愰潧绁﹂柟鍏肩暘閸斿矂鎮為崹顐犱簻闁圭儤鍨甸鈺呮倵濮橆剦妲归柕鍥у瀵粙濡歌閸c儳绱撴担绛嬪殭婵☆偅绻堝濠氭偄绾拌鲸鏅i悷婊冪Ч閹﹢鎳犻鍌滐紲闁哄鐗勯崝搴g不閻愮儤鐓涢悘鐐跺Г閸犳﹢鏌℃担鐟板鐎规洜鍠栭、姗€鎮╅搹顐ら拻闂傚倷娴囧畷鍨叏閹惰姤鈷旂€广儱顦崹鍌炴煢濡尨绱氶柨婵嗩槸缁€瀣亜閺嶃劎鈽夋繛鍫熺矒濮婅櫣娑甸崨顔俱€愬銈庡亝濞茬喖宕洪埀顒併亜閹哄棗浜鹃梺鎸庢穿婵″洤危閹版澘绫嶉柛顐g箘椤撴椽姊虹紒妯哄鐎殿噮鍓欒灃闁告侗鍠氶崢鎼佹⒑閸撴彃浜介柛瀣閹﹢鏁冮崒娑氬幈闁诲函缍嗛崑鍡樻櫠椤掑倻纾奸柛灞剧☉缁椦囨煙閻熸澘顏柟鐓庢贡閹叉挳宕熼棃娑欐珡闂傚倸鍊风粈渚€骞栭銈傚亾濮樺崬鍘寸€规洖缍婇弻鍡楊吋閸涱垽绱遍柣搴$畭閸庨亶藝娴兼潙纾跨€广儱顦伴悡鏇㈡煛閸ャ儱濡煎褜鍨伴湁闁绘ǹ绉鍫熺畳闂備焦瀵х换鍌毼涘Δ鍛厺闁哄洢鍨洪悡鍐喐濠婂牆绀堟慨妯挎硾閽冪喖鏌曟繛褍瀚烽崑銊╂⒑缂佹ê濮囨い鏇ㄥ弮閸┿垽寮撮姀鈥斥偓鐢告煥濠靛棗鈧懓鈻嶉崶銊d簻闊洦绋愰幉楣冩煛鐏炵偓绀嬬€规洟浜堕、姗€鎮㈡總澶夌处

    重磅专题
    往期文章
    最新文章