Xojo日本語ブログ

マルチプラットフォーム対応アプリが開発できるXojoのブログです。

macOSのHTMLViewアプリで外部リンクを標準ブラウザで開く

前回の記事で紹介したHTMLViewを使ったアプリの場合、対象としているアプリケーションのドメイン以外のURLはアプリ内では開きたくないでしょう。どんなURLでも開いてしまったら単なるブラウザになってしまいます。

そこでクリックされたURLを判別してHTMLViewで開くか、外部ブラウザで開くかを判別したいと思います。また、macOS版のHTMLViewでは外部ドメインのクリックが有効になっていないので、その問題も解決します。

JavaScriptを使う

例えば前回のMastodonアプリの場合、jQueryが使われています。そこで、HTMLViewのExecuteScriptでもjQueryが使えます。コードとしては以下のようになります。

$('body').on('click', 'a', function(e) {
  var url = $(e.target).parents('a');
  if (url.attr('target') == '_blank') {
    $('textarea').val(url.attr('href'));
    document.title = 'url: ' + url.attr('href');
    return false;
  }
});

クリックされたDOMのリンクが target="_blank" であれば(別タブなどで開く設定であれば)、そのURLをtitleタグに設定します。この方法は以前書いたHTMLViewerで表示されているURLを取得する - Xojo日本語ブログのやり方になります。

HTMLのタイトルを変更すると、TitleChangedイベントが呼ばれます。後は送られてきた新しいタイトルのURL部分だけを取り出してShowURLを実行します。

if instr(newTitle,"url: ")>0 then
  Dim myURL() as string = split(newTitle, "url: ")
  ShowURL(myURL(1))
end if

これで外部URLの場合だけ、標準ブラウザでそのURLを開けるようになります。


XojoからHTMLView内のコンテンツに触ることはできません。そこでtitleタグを使ってメッセージを送ります。HTMLViewアプリの場合はこの方法を使ってみてください。

なお、WindowsmacOS用にビルドしたファイルをRelease Base · moongift/MastdonClientにアップロードしてあります。参考にしてください。