为app建立一个浏览器窗口

为了显示一个网页,我做了一个窗口,同样参考前面写过的为Android做一个ShowModal窗口。先看一下代码:

unit Form.WebBrowser;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  System.Threading, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Objects, FMX.Layouts, CC.NavigationBar, CC.StatusBar, CC.X5WebView, FMX.WebBrowser;

type
  TWebBrowserForm = class(TForm)
    CCStatusBar1: TCCStatusBar;
    CCNavigationBar1: TCCNavigationBar;
    Rectangle1: TRectangle;
    WebBrowser1: TWebBrowser;
    CCX5WebView1: TCCX5WebView;
    procedure FormCreate(Sender: TObject);
    procedure FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
        Shift: TShiftState);
  private
    FURL: string;
    procedure SetURL(const Value: string);
  public
    property URL:string read FURL write SetURL;
  end;

procedure ShowWebBrowserForm(const AURL:string; AFormResult: TProc<TModalResult>=nil);

implementation

{$R *.fmx}
//调用方法:
//   ShowWebBrowserForm(‘https://www.baidu.com/‘,
//    procedure(AResult: TModalResult)
//    begin
//
//    end);

var
  WebBrowserForm: TWebBrowserForm;

procedure ShowWebBrowserForm(const AURL:string; AFormResult: TProc<TModalResult>);
begin
  if not assigned(WebBrowserForm) then
  begin
       WebBrowserForm := TWebBrowserForm.Create(Application);
  end;

  WebBrowserForm.URL:=AURL;

  WebBrowserForm.ShowModal(
    procedure(AResult: TModalResult)
    begin
      if Assigned(AFormResult) then
        AFormResult(AResult);

      TTask.Run(
                procedure
                begin
                  TThread.Synchronize(nil,
                    procedure
                    begin
                      WebBrowserForm.DisposeOf;
                      WebBrowserForm := nil;
                    end);
                end);
    end);
end;

procedure TWebBrowserForm.FormCreate(Sender: TObject);
begin
{$IFDEF ANDROID}
  WebBrowser1.Free;
{$ELSE}
  CCX5WebView1.Free;
{$ENDIF}
end;

procedure TWebBrowserForm.FormKeyUp(Sender: TObject; var Key: Word;
    var KeyChar: Char; Shift: TShiftState);
begin
  if Key = vkHardwareBack then
       self.ModalResult := mrCancel;
end;

procedure TWebBrowserForm.SetURL(const Value: string);
begin
  FURL := Value;
{$IFDEF ANDROID}
  CCX5WebView1.loadURL(Value);
{$ELSE}
  WebBrowser1.Navigate(Value);
{$ENDIF}
end;

end.

通过代码,可以看到:

1.使用了ChinaCock的X5WebView来支持android

2.使用了原生的WebBrowser来支持Windows平台,因为ChinaCock的X5WebView现在不支持Windows平台。这里有个小坑,我在运行期建立WebBrowser实例,发现不显示网页,设计期放置到Form上,就正常,这应该是10.4.2的bug.

3.调用方法在注释中写了,可以使用回调函数,也可以省略,只显示一个网页。

4.最后,开发环境:在10.4.2下测试通过

你要是使用,建一个Form,放置一个X5WebView及WebBrowser两个组件即可,然后复制这里的代码。好象再没有什么可写的了。

 

为app建立一个浏览器窗口

上一篇:appium启动参数


下一篇:flink1.11报错:java.lang.IllegalStateException: No ExecutorFactory found to execute the application