開発ブログ - FireMonkey + MacOSXで TWebBrowser
以前 Delphi ML に FireMonkey + MacOSX で TWebBrowser を使いたいという投稿が流れていました。
stackoverflow にあるコードで WebView を使ってみたが、画面に表示されなかったということでした。
そのときに提示されたURLが↓
webview-not-displaying-in-macos-using-delphi-xe2(stackoverflow)
ようやく少し余裕ができたので、自分でも試してみることにしました。
確かにコードの通りやってもうまく行きません。
そもそも view が表示されているように見えないのです。
これについては addSubview が必要なのでは?と見当をつけてみました。
さらに念のために setHostWindow もしてみます。
ここまでは、stackoverflow のコメントにあったのと同じですね。
NSView などを取得するのが XE5 では XE2 より簡単にできるようになっています。
var
view: NSView;
begin
...
view := WindowsHandleToPlatform(Self.Handle).View;
view.addSubview(WebView);
WebView.setHostWindow(view.window);
これでとりあえず window は表示されるようになりました。
問題は WebView.mainFram.loadRequest をしても、何も表示されないことです。
どうもおかしいですね。loadHTMLString でもだめでした。
代わりに setMainFrameURL を使ってみると、おぉ!!!うまく表示されましたよ!!!
ということは NSURLなどの作り方が問題なのでしょう。
urlStr := TNSURL.Wrap(TNSURL.OCClass.URLWithString(NSSTR(AUrl)));
urlReq := TNSURLRequest.Wrap(TNSURLRequest.OCClass.requestWithURL(urlStr));
view.mainFrame.loadRequest(urlReq);
という具合に修正したら、うまく動くようになりました。