目前只知道在WebBrower里的URL传入参数的方法,这只是单向的。
请问有没有其他的方式可以让delphi程序与网页进行数据交互(双向的)?

解决方案 »

  1.   

    让delphi程序与网页进行数据交互(双向的),没明白你的意思,webbrowser能得到网页里面的所有数据呀。你可以给网页里面的某个input框赋值呀。也可以点击提交这不就是双向的吗?
      

  2.   

    首先你要知道“与网页交互”的说法是不准确的。准确一点的说法是“与Web服务器交互”
    Web服务器只是根据你的请求返回给你一串HTML,浏览器把这串HTML展示给你,就是你看到的客户端页面
    页面永远是存在于客户端(浏览器端)的,是静态的,不存在交互的说法
      

  3.   


    ////Default2.aspx
    <%@ Page Language="C#" %><%
        Page.Response.Write(Page.Request["QS"]);
    %>procedure TForm1.Button1Click(Sender: TObject);
    var
      SS: TStringList;
      Stream: TStringStream;
    begin
      Stream := TStringStream.Create('');
      SS := TStringList.Create;
      SS.Add('QS=eefffsssss');
      Self.IdHTTP1.Post('http://xxxxxxxxx/Default2.aspx', SS, Stream);
      Showmessage(Stream.DataString);
      SS.Free;
      Stream.Free;
    end;
      

  4.   

    用TWebbrowser在程序中加载显示一个页面,当鼠标点击页面中的对象时,程序可以响应到这个点击事件。不知楼主想要的是不是这个意思?如果是的话,那就要让TWebbrowser实现IDocHostUIHandler接口,然后在该接口的GetExternal方法中进行处理。这些做起来还是有些复杂,建议直接去用EmbeddedWB组件,它都实现了这些。如果楼主真想自己研究,下面这篇文章不错,可以参考:
    http://blog.csdn.net/CathyEagle/archive/2004/08/09/69607.aspx
      

  5.   

    8楼追加:
    在浏览器地址栏输入
    http://xxxxxxxxx/Default2.aspx?QS=eefffsssss
    回车后返回的HTML页面内容是:
    eefffsssss
      

  6.   


       for K := 0 to Form1.WebBrowser4.OleObject.Document.all.tags('span').Length - 1 do
        begin
          str1 := Form1.WebBrowser4.oleobject.document.all.tags('span').item(K).innertext;
          if ansicontainsstr(str1,'write a comment') then begin
            Form1.WebBrowser4.oleobject.document.all.tags('span').item(K).click;
            break;
          end;
        end;    
    这是模拟点击网页中的1个元素!
      

  7.   


    1、在程序的界面里要呈现网页,除了webBrower控件,还有其他的没。
    2、程序传入参数给网页。
      目前,我只是用在URL后加参数的方式,还有没有其他简单的方式
    3、网页执行结果后,返回结果给程序,这个该如何实现能不能举个简单的例子?
      

  8.   


    function TForm1.GetData(url:string): string;
    var
      responseText: WideString;
      xmlHttp: oleVariant;
    begin
      Result:='';
      try
        xmlHttp:=CreateOleObject('Msxml2.XMLHTTP');
        xmlHttp.open('GET',url,false);
        xmlHttp.send();
        responseText:=xmlHttp.responseText;
        if xmlHttp.status='200' then
        begin
          Result:=responseText;
        end;
        xmlHttp := Unassigned;
      except
        Result:='';
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo1.lines.text:=GetData('xxxxx?参数1=...')
    end;
      

  9.   

    最好不要在URL后+参数实现,这种提交方式默认是用GET方式提交
    隐患:
    1.不安全,容易被用户看到
    2.提交数量有大小限制(使用GET来提交时,QueryString是放到HTTP HEADERS中的,HTTP协议对HEADER大小有限制)
    所以用INDYHTTP.POST方法来实现表单数据的提交(这时提交的数据是放到POST DATA中)
      

  10.   

    你去找下用网页做界面的方法用的COM组件传递,绝对精确