比如jscript中的对象window,其操纵的就是浏览器窗口本身,调用window的方法就可以对窗口进行一部分操作。
如果我自己编一个浏览器,里面嵌入一个webbrowser,能不能自己给ie添加一个自己定义的对象来和外边的外壳关联。
我在用softimage|xsi(三维软件)的时候发现,xsi的脚本是完全遵守js和vbs规范的,只不过做了强大的扩展,它自带一个浏览器,只要把xsi的脚本和标准的vbs写在一起,在网页里面点一个什么东西,xsi就会自己去执行一大堆脚本了,很厉害!在网页中点钟机器人的手(图片),场景中机器人(三维模型)的手就被选中。
我想知道这如何是实现,我现在可以用一些不正规的办法实现比较简单的功能,不过网页中的js就不太好看了,比较乱。要实现这个功能恐怕要用到COM了,欢迎大家讨论。大家如果需要我已可以把我现在用的办法告诉大家。

解决方案 »

  1.   

    不难。
    1 从类型库中导入ScriptControl
    2 暴露一个IDispatch接口给脚本
    // FormCreate
      ScriptControl1.AddObject('MyWebBrowser', WebBrowser1.DefaultInterface, True);3 解释用户自写的脚本
      // Button1Click
      ScriptControl1.ExecuteStatement(Memo1.Text); 
      // 例如: 若用户在Memo1键入代码[ MyWebBrowser.Navigate("www.csdn.net"); ]并点击Button运行,则WebBrowser1载入www.csdn.net
      

  2.   

    误会我的意思了,我的意思是在网页里面写脚本,在网页里面遥控外壳,比如外壳里面有个memo1和一个WebBrowser1,WebBrowser1浏览某个网页,在网页里面执行一句memo.writeln(123456);memo1里面就出现123456。
    行不行?如何做?
      

  3.   

    在你的程序里创建一个自动化对象(通过它来进行memo读写),
    在web脚本里用new ActiveXObject方法访问该对象。
      

  4.   

    //------1
    // delphi
    new->ActiveX->Automation object TMyObj = class(TAutoObject, IAlarmSystem)
     private
       ...
     protected
       procedure WriteMemo(AMessage: WideString); safecall;
       ...
     end;//------------2
    // js in web
    var obj = new ActiveXObject('MyApp.MyObj');
    obj.WriteMemo('hello, world!');
    obj = null;