webkit - Webview no muestra en MacOS usando Delphi XE2




delphi-xe2 freepascal (3)

¿Has considerado el puerto Chromium Embedded para Delphi ?

Empecé a convertir las interfaces de Webview para consumirlas en Delphi. Logré que se cargue la biblioteca de webkit, y parece que los métodos de interfaz que se llaman funcionan correctamente, sin embargo, parece que no puedo mostrar la vista web en el formulario principal.

Debajo está mi interfaz que está declarada

  WebFrameClass = interface(NSObjectClass)
  ['{7BE750C8-DFEC-4870-851A-12DBCB0B78F6}']
  end;

  WebFrame = interface(NSObject)
  ['{BCFA04BE-41AB-4B78-89C0-3330F12C7695}']
    procedure loadRequest(request: NSURLRequest); cdecl;
  end;
  TWebFrame = class(TOCGenericImport<WebFrameClass, WebFrame>)  end;

  WebViewClass = interface(NSViewClass)
  ['{0D9F44B7-09FD-4E35-B96E-8DB71B9A2537}']
    {class} function canShowMIMEType(MIMEType: NSString): Boolean; cdecl;
  end;

  WebView = interface(NSView)
  ['{C36D8016-2FCB-49F0-BA1C-C9913A37F9AC}']
    procedure clos; cdecl;
    procedure setHostWindow(hostWindow: NSWindow); cdecl;
    function initWithFrame(frame: NSRect; frameName: NSString; groupName: NSString): Pointer; cdecl;
    function mainFrame: WebFrame; cdecl;
  end;
  TWebView = class(TOCGenericImport<WebViewClass, WebView>)  end;

Y aquí sigue al código para construir un WebView:

procedure TForm2.Button1Click(Sender: TObject);
var
  PWebView: Pointer;
  FwkMod: HMODULE;
  MyWebView: WebView;
  urlStr: NSURL;
  urlreq: NSURLRequest;
const
  WebKitFWK: string = '/System/Library/Frameworks/WebKit.framework/WebKit';
begin
  FwkMod := System.SysUtils.LoadLibrary(PWideChar(WebKitFWK));
  PWebView := TWebView.Alloc.initWithFrame(MakeNSRect(10, 10, 300, 300), nil, nil);
  MyWebView := TWebView.Wrap(PWebView);

  urlStr := TNSURL.Create;
  urlstr.initWithString(NSSTR('http://google.com.au/'));
  urlreq := TNSURLRequest.Create;
  urlreq.initWithURL(urlstr);
  MyWebView.mainFrame.loadRequest(urlreq);
end;

El código se ejecuta sin generar excepciones, pero simplemente no desea aparecer. ¿Qué debe hacerse de manera diferente en Delphi? Los ejemplos que encontré para el objetivo C parecen ser bastante simples:

Algunos ejemplos de Object C que he visto mencionan IBOutlets. No parece que esto sea relevante para Delphi.

¿Cómo hacer que el proyecto WebView OSX Xcode cargue una URL en el inicio?

Gracias.


Getting the NSWindow of a FMX form
convertir una referencia TForm a NSWindow
establecer la ventana de host.
MyWebView.setHostWindow(MyNSWindow)

procedure TForm2.Button1Click(Sender: TObject);
var
[...]
 ObjTOC: TOCLocal;
 MyNSWindow : NSWindow;
[...]  
 ObjTOC := (FmxHandleToObjC(Form2.Handle) as TOCLocal);
 MyNSWindow := NSWindow(TOCLocalAccess(ObjTOC).Super);

PWebView := TWebView.Alloc.initWithFrame(MakeNSRect(10, 10, 300, 300), nil, nil);
 MyWebView := TWebView.Wrap(PWebView);
 MyWebView.setHostWindow(MyNSWindow);

[...]
 MyWebView.mainFrame.loadRequest(urlreq);
end;

El código en la pregunta produce el resultado esperado en la actualización XE2 4. Tenga en cuenta que la actualización 3 produce el resultado incorrecto y, por lo tanto, claramente la corrección llegó con la actualización 4. Además, XE3 produce el resultado esperado.







macos delphi webkit delphi-xe2 freepascal