Delphi WebBrowser调用WebSocket 服务

Posted 丹心石

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi WebBrowser调用WebSocket 服务相关的知识,希望对你有一定的参考价值。

webSocket Demo
  1. 使用工具:WebBrowser
  2. 传输参数:delphi 给js 赋值JSON字符串,js 接收到后通过JSON.parse()方法转换成JSON对象,然后根据需要参数进行读取, Delphi 通过SuperObject 处理JSON数据
  3. 调用JSON方法:WebBrowser1.oleObject.document.parentWindow.execScript(\'js方法名\',\'JavaScript\')
  4. 设置js变量 :WebBroser1.oleObject.document.Script.str:=\'newvalue\'; str为js定义变量
  5. Delphi 触发html 中的Button 单击事件:WebBrowser1.OleObject.document.getElementById("按钮id").click;
unit uWebSocketDemo;

  webSocket Demo
  使用工具:WebBrowser
  传输参数:delphi 给js 赋值JSON字符串,js 接收到后通过JSON.parse()方法转换成JSON对象,然后根据需要参数进行读取,
  Delphi 通过SuperObject 处理JSON数据
  调用JSON方法:WebBrowser1.oleObject.document.parentWindow.execScript(\'js方法名\',\'JavaScript\')
  设置js变量 :WebBroser1.oleObject.document.Script.str:=\'newvalue\';  str为js定义变量
  Delphi 触发html 中的Button 单击事件:WebBrowser1.OleObject.document.getElementById("按钮id").click;
  

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    WebBrowser1: TWebBrowser;
    Button8: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button8Click(Sender: TObject);
  private
     Private declarations 
  public
     Public declarations 
  end;

var
  Form1: TForm1;

implementation

$R *.dfm
uses superobject,ShellAPI;

var
  url:string;
  jo:TSuperObject;
  path:string;
const
  sStu=\'"title":"我的websocket","content":"websocket测试客户端"\';
procedure TForm1.Button1Click(Sender: TObject);
begin
  webbrowser1.Navigate(url);
  WebBrowser1.Silent:=True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  url:=ExtractFilePath(ParamStr(0))+\'demo-dip.html\';
  path:=ExtractFilePath(ParamStr(0))+\'\\HOAssistant\\HOAssistant\\HOAssistant.exe\'

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  obj:OleVariant;
begin
  WebBrowser1.OleObject.document.Script.str:=sStu;
  WebBrowser1.OleObject.document.parentWindow.execScript(\'ftest()\',\'JavaScript\');

  Memo1.Lines.Add(WebBrowser1.OleObject.document.Script.str);

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  WebBrowser1.OleObject.document.getElementById(\'btnlogin\').click;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
   WebBrowser1.OleObject.document.getElementById(\'btnpatient\').click;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
     WebBrowser1.OleObject.document.getElementById(\'btnbingan\').click;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
   WebBrowser1.OleObject.document.getElementById(\'btnexit\').click;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
   webbrowser1.Navigate(url);
   WebBrowser1.Silent:=True;

end;

procedure TForm1.Button8Click(Sender: TObject);
begin
  ShellExecute(Handle,\'open\',PAnsiChar(path),nil,nil,SW_SHOWNORMAL);
end;

end.

DELPHI中的webbrowser如何有效防止内存疏漏

根据网上给出的修改文件重新编译的办法可以有效减少,但仍然未能杜绝。我做的程序仍然是过一段时间就大量占用内存,烦死了。

有没有办法彻底解决这个问题?若是要控件解决,麻烦给个控件地址,谢谢。
我没怎么写代码,一般就是打开一个链接,然后用try
wb1.OleObject.document.all.item('DDDDD').innerText:=*******;excpet end;
这类的

或者自动刷新的页面。一刷新就占用多几k到几十K的内存,晕死哦

WEBBROWSER控件是安全的,代码写的好就可以了。。
但占用内存多,那是没办法的。。除非你用底层的WINSOCK自己写个GET HTTP
参考技术A 没听说webbrowser会造成内存泄露啊,是不是你调用了它的接口又没释放呢?检查一下你的代码吧

例如:
finally
Element._Release
end;

以上是关于Delphi WebBrowser调用WebSocket 服务的主要内容,如果未能解决你的问题,请参考以下文章

delphi中WebBrowser控件怎么模拟点击网页框架中的按钮button?

delphi 怎么调用百度地图API,如下

delphi中WebBrowser1打开网页

delphi中 已知url='http://163.COM', 如何得到title='网易'。

delphi 怎么判断webbrowser打开网页成功?

delphi webbrowser 问题