为了显示一个网页,我做了一个窗口,同样参考前面写过的为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两个组件即可,然后复制这里的代码。好象再没有什么可写的了。