Поиск сообщества
Показаны результаты для тегов 'webview'.
Найдено: 2 результата
-
Уважаемые форумчане, искал на форуме, но возможно не нашел что-то похожее по своему вопросу ... Нужна возможность использовать жесты в TWebBrowser. Стандартные жесты в FMX как я понял не работают, TWebBrowser очевидно благополучно игнорирует их. Читая API на developer.apple.com нашел то что нужно setAllowsBackForwardNavigationGestures. Данное действо доступно в модуле iOSapi.WebKit. Как заставить TWebBrowser на форме выполнять это требование? В попытках найти решение пытался выполнить такое извращение, явно осознавая что это не совсем то что нужно: На форуме нашел такой запрос но он за 2014 год и проблема в том что мне нужно не создавать свой WebView а попытаться заставить родной TWebBrowser делать это. Но если это не возможно то прошу подсказать как воткнуть на форму свой WebView. Читал что есть возможность использовать Deligate но как именно это делать, пока не понятно. Буду рад любым вариантам! P.S. Забыл упомянуть. Студия разработки RAD Studio 10.4.2 Sydney. Аппаратура MacBook Pro 13 Big Sur 11.2.3 + XCode 12.5 + Apple iPhone 11(14.5).
-
- twebbrowser
- webview
-
(и ещё 2 )
C тегом:
-
Помогите портировать интерфейсы для реализации делегата для WebView.setPolicyDelegate, с помощью которого можно запрещать или переопределять переходы по ссылкам. Отталкивался от хелпа эпла. Реализовал вроде как все, что нужно. Страница гугла открывается, но колбэк делегата не вызывается. unit MainFormUnit; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, Macapi.AppKit, Macapi.CocoaTypes, Macapi.Foundation, Macapi.ObjectiveC, FMX.StdCtrls, Posix.Stdlib, Macapi.CoreFoundation, FMX.Platform.Mac, System.Generics.Collections; type 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 setPolicyDelegate(delegate: Pointer); 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; WebPolicyDecisionListener = interface(IObjectiveC) ['{2AD8355D-6C57-410D-A4F4-230C90B6D799}'] procedure download; cdecl; procedure ignore; cdecl; procedure use; cdecl; end; WebViewDelegate = interface(IObjectiveC) ['{5B66FF5F-DA92-48D3-A715-C89A68AA8995}'] procedure decidePolicyForNavigationAction(actionInformation: NSDictionary; request: NSURLRequest; frame: WebFrame; listener: WebPolicyDecisionListener); cdecl; end; TWebViewDelegate = class(TOCLocal, WebViewDelegate) procedure decidePolicyForNavigationAction(actionInformation: NSDictionary; request: NSURLRequest; frame: WebFrame; listener: WebPolicyDecisionListener); cdecl; end; TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); public MyWebView: WebView; MyDelegate: TWebViewDelegate; end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); var PWebView: Pointer; FwkMod: HMODULE; urlStr: NSURL; urlreq: NSURLRequest; MyView: NSView; const WebKitFWK: string = '/System/Library/Frameworks/WebKit.framework/WebKit'; begin FwkMod := System.SysUtils.LoadLibrary(PWideChar(WebKitFWK)); PWebView := TWebView.Alloc.initWithFrame(MakeNSRect(10, 10, 500, 500), nil, nil); MyWebView := TWebView.Wrap(PWebView); MyWebView.setAutoresizingMask(NSViewHeightSizable or NSViewWidthSizable); //MyWebView.setHostWindow(MyNSWindow); MyView := WindowHandleToPlatform(Form1.Handle).View; MyView.addSubview(MyWebView); MyDelegate := TWebViewDelegate.Create; MyWebView.setPolicyDelegate((MyDelegate as ILocalObject).GetObjectID); urlStr := TNSURL.Wrap(TNSURL.Alloc.initWithString(NSSTR('http://www.google.com/'))); urlreq := TNSURLRequest.Wrap(TNSURLRequest.Alloc.initWithURL(urlstr)); MyWebView.mainFrame.loadRequest(urlreq); urlStr.release; urlreq.release; end; { TWebViewDelegate } procedure TWebViewDelegate.decidePolicyForNavigationAction( actionInformation: NSDictionary; request: NSURLRequest; frame: WebFrame; listener: WebPolicyDecisionListener); begin MessageDlg('hi', TMsgDlgType.mtInformation, [TMsgDlgBtn.mbOK], 0); end; end. Также не совсем понятно, где должен располагаться метод webView:decidePolicyForNavigationAction:request:frame:decisionListener. В документации он объявлен как: - (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener>)listener Т.е. похоже на то, что он должен быть методом класса WebView? Или же методом произвольного класса делегата? И еще, я так понимаю, что полное имя этого метода webView:decidePolicyForNavigationAction:request:frame:decisionListener, то есть объявляя его как decidePolicyForNavigationAction возможно мы лишаем mac os возможности найти его. Но как же тогда объявить его полностью?