Denen blog

株式会社電縁の社員によるブログです。

第11回ITSフットサル大会予選に参加してみたらまさかの結果に...!?

f:id:yasuaki-sakai:20191112200239j:plain

初めまして!新人の津金澤です!

先日ITSのフットサル大会に参加してきましたのでその様子をご紹介いたします。

 

【大会概要】

そもそもタイトルにもあったITSとは何かというところですが、

ITSとは…

正式名称が関東ITソフトウェア健康保険組合という弊社がが所属している健康保険組合のことです。

そんなITSでは所属事業者が参加できるイベントが数多く開催されており、今回は電縁フットサル部としてフットサル大会に出場してきました。

 

ITSのフットサル大会は「オープン」(中級者~上級者レベル)と「エンジョイ」(初心者~初級者レベル)という2つのカテゴリで分けられています。

また「エンジョイ」では、女性競技者がフィールドプレイヤーとして出ている場合、通常5名なのですが6名まで試合に出場できます。

 

我々、電縁フットサル部はチーム名「★DENEN★」でエンジョイに参加しました。

 

このITSフットサル大会で優勝するには予選リーグ⇒準決勝大会⇒決勝リーと3回勝ち抜かなければなりません。

そんな中、今回は予選リーグに挑みました!

予選は5チーム総当たりのリーグ戦で、1位のチームのみが準決勝大会へと進むことができます。

詳しくは以下のページをご覧ください。

www.its-kenpo.or.jp

 

【試合速報】

第一試合はなんと午後の部のオープニングマッチ!

緊張感がピッチ上を漂う中の試合でしたが、なんと結果は4-0で勝利!!

幸先のいいスタートを切ることができました。

 

ちなみに、この試合で私は某有名サッカー漫画の〇崎くんばりの顔面ブロックで相手のコーナーキックを防ぎました。

(実際のところはよそ見をしていただけというのはここだけのお話...)

 

しかし、第二試合は前半相手に一瞬のスキを突かれてしまい得点を与えてしまいます。

後半も攻め続けましたが、相手の堅守にゴールを奪うことができず0-1で惜しくも敗退してしまいました...

試合内容は悪くなかっただけに非常に悔やまれる試合でした。

 

その後は気持ちを切り替え試合に臨み、第三試合3-1、第四試合4-0で見事に快勝することができました。

そして、運命の結果は...

 

【結果発表】

第二試合こそ敗れはしましたが、他三試合は点を取りまくった結果3勝することができました!

 

しかし、第二試合で唯一破れたチームがまさかの全勝...

チーム★DENEN★は惜しくも2位で、予選敗退という結果になりました。

f:id:yasuaki-sakai:20191112200444j:plain

今回は非常に悔しい結果となってしまったので、また来年頑張ろうと思います。

しかし、参加している方、応援に来ている方みんな笑顔でとてもエンジョイしている姿がとても印象的でした。

そういった意味ではどのチームも1位なのではないでしょうか。

 

書いた人:テレコム第2チーム 津金澤

f:id:yasuaki-sakai:20191112200530p:plain

平日BBQ

こんにちは

デジタルサイネージを担当している村石です。

 

私の居るチームは自社開発のプロダクトを開発、販売、サービスの提供を行っており、細かな開発や保守が日々続いてます。

そういった特性もあり、プロジェクトの明確な切れ目というものがなく、なかなか「打ち上げ」のような催しが出来ずにいました。

そこで一念発起、業務後に出動可能なメンバーで平日BBQを決行してきました!

f:id:yasuaki-sakai:20190610104723j:plain


この日は暑すぎずカラッとした陽気でしたが、平日ということもあって最初は客足もまばらでした。

がしかし、あれよあれよとサラリーマンが押し寄せ、最終的にはほぼ満席。

食べ放題飲み放題ならではの満腹感となりました。

最後は営業さんのお子さんのヒーロー必殺技ショーを堪能し解散となりました!

f:id:yasuaki-sakai:20190610104842j:plain
f:id:yasuaki-sakai:20190610104858j:plain

暑くなる時期、BBQやビアガーデンも活況となりますが、飲みすぎ食べすぎには注意して、令和最初の夏を乗り切りましょう!

 

書いた人:デジタルサイネージ担当 村石

f:id:yasuaki-sakai:20190610114251j:plain

バイクシェアサービスを使ってみた

こんにちは、イノベーションオフィスの吉田です。

 

皆さんは街中で赤い小さめの電動自転車を見かけたことはありますか?

最近同じような自転車をよく見るなーと思っていたのですが、ドコモがやっているバイクシェアサービスの自転車だったんですね。

docomo-cycle.jp

 

で、最近外出が増えてきた&Twitterでオススメいただいたので使ってみることにしてみました!

 

こちらのサービスは事前に登録が必要で、都内で借りたり返したり出来るエリアは以下の通りです。

すごいですね!

しかも自転車が置いてある場所(サイクルポート)も結構有るんです!

 

というわけで事前登録して、早速使ってみることとします。

会社が五反田なので五反田周辺のスポットを探し、自転車を予約します。

予約するとその自転車の解除キーが通知されるので、20分以内にスポットまで行って鍵を解除する必要があります。

f:id:yasuaki-sakai:20190603122949j:plain

現場に行ってみるとこんな感じでした。

自転車にはそれぞれIDが付いているので自分が予約した自転車を探し、解除キーを入力すると鍵が外れて使えます!

 

今回は恵比寿での打ち合わせだったので目黒川沿いを走ったのですがとても気持ちよくて快適でした!

ただ、だんだん暑くなっていくので汗が若干気になるかもしれません・・・

 

打ち合わせが終わって帰ってきたら返却です。

返却の仕方が最初よくわからなかったのですが、スポット周辺で「ENTER」を押すだけで完了でした。

f:id:yasuaki-sakai:20190603123607j:plain

便利ですね!

 

というわけでバイクシェアサービスの紹介でした。

結構広い範囲で使えるようなのでまた使ってみたらTwitterで呟いてみたいと思います!

 

それでは!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

フィリピン:マカティでスパに行く

こんにちは&はじめまして。

今年入社三年目の桐原です。

 

弊社では、フィリピンでのオフショア開発をしています。

普段は開発業務を行っている私ですが、現在私はフィリピン人の新卒採用の為、フィリピンに来ています。

 

さて、弊社のオフショア開発は・・・

 

と、オフショアの話を聞きたかったみなさん。ごめんなさい。

 

今回は「美容」がテーマです。

日本と同じかまたは日本より良いサービスが日本より安い値段で受けれちゃうのです!!!

 

今回は私がよく行くスパについてレポートします。

 

私がよく行く(もはや週2で行ってる)スパは、GreenBelt 1というモールの中にある
The Spa WELLNESSというスパです。

f:id:yasuaki-sakai:20190520125903p:plain

Jaka Buildingというのが弊社のフィリピンオフィスで、Google Mapsでは徒歩11分と書かれてますが、実際は10分かからないで行けると思います。

ちなみにマニラ空港からタクシーだと空いてれば20分程度で着きます。

 

入り口はこんなかんじ。

近くにスーパーがあります。

f:id:yasuaki-sakai:20190520125946j:plain

入り口を開けるとこんな感じ。

f:id:yasuaki-sakai:20190520130006j:plain

基本は予約なしで施術が受けれますが、混雑時はその場で予約、または電話予約をしたほうがいいかもしれません。

私が行ったのは土曜日の夕方17時前で混んでいたようで、その場で20時に予約ができました。

 

今回受けたメニュー

f:id:yasuaki-sakai:20190520130039j:plain

LIGHT&LUMINOUS FACIAL 60分

毛穴消失コース

※桐原命名

1980ペソ

 

f:id:yasuaki-sakai:20190520130107j:plain

THAI FOOT MASSAGE 60分

むくみ撲滅コース

※桐原命名

990ペソ

 

計2970ペソ

日本円で6198円です。

 

ちなみに、え?何が安いの?たっけーじゃん!!って思ったそこのあなた!!

 

日本のエステで同じような内容を受けると、フェイシャルエステで1時間1万円、フットマッサージで1時間8千円でした。

超絶お得だということがおわかりいただけたでしょうか。

 

ちなみに今回私はフェイシャルとフットマッサージのみですが、全身マッサージやらオイルマッサージやら沢山メニューがあります。

全身オイル、フェイシャル、フットマッサージ3時間コースのセットもあります。

確かそれでも8千円程度だった記憶があります。

 

受付で好きなコースを選んで、お会計を済ませた後、ロビーで待ってるとエステティシャンさんが名前を呼んでくれるので、それまで雑誌でも読んで待ってましょう。

ちなみに、私はよく自分の名前を「Kiri」と名乗るのですが、フィリピン人は聞き取りずらいのか、「Tidy」か「Kitty」と勘違いされやすいです。

「are you Kitty?」と聞かれて違いますと答えたら別の人を先に施術してしまって30分待たされたことがあるので注意です。

 

心配な人は名前を聞かれたときに、つづりと名前を伝えると間違いもなくて良いと思います。

 

さて毛穴消失コースはざっくり、まずはオイルマッサージをして。。。。

と詳細に書こうかと思ったのですが。

 

すいません。爆睡しました!!!!!!!!!

(というかすいません、何回も行ってるのに毎回爆睡してます)

 

途中で、毛穴洗浄が終わった後に、ねえすごい取れたよ!見る?って言われて起きたのは覚えてます。

実際ものすごかったです。。。。w

 

むくみ撲滅コースもすいません引き続き爆睡してました・・・・

 

そんなわけでご自分で行って体感してください。(雑)

 

■まとめ

・総評

日本と同じレベルの技術が格安で受けれてかなりお得。

店員さんもみんな感じが良い。ボッタクられないので安心。

立地もGreenBeltモール内なので、治安面も安心。夜でも大丈夫。

女ひとり歩きしてても今の所は問題ないです。

もちろん100%安全とは言えませんので、自己判断で。

エアコン強め、結構寒いです。

カーディガンとかを持ってくといいかもしれません。

夜21時までやってるので、仕事終わりにでもいけます。

 

・毛穴消失コース

顔の肌トーンが上がりました。

毛穴がなくなりました。

 

・むくみ撲滅コース

体がぽかぽかします。

座り仕事で溜まったむくみが解消できます。

時たま痛いです。

(痛いのは肝臓の疲れだよって笑われましたけど・・・)

 

いかがでしょうか。

レポートします!っていいつつ肝心なところで爆睡してしまったのでかなり雑記事になりましたが、マニラを訪れた際はぜひ行ってみてください!!

それでは。。。

 

www.thespa.com.ph

 

書いた人:テレコム第1チーム 桐原

f:id:yasuaki-sakai:20190520143223p:plain

金目鯛の煮付けを食べてきました

f:id:yasuaki-sakai:20190513185107j:plain

こんにちは、イノベーションオフィスの吉田です。

今日は美味しい金目鯛の煮付けがいただけるお店をご紹介したいと思います。

 

さっそくですが、こちらです!

tabelog.com

派手な海鮮丼で有名なお店ですが、ここの金目鯛の煮付けが絶品なんです。

私はこのためだけに伊東に行きました(笑)

お昼でも夜でも食べられますが、休日のランチは行列が出来ていたりするのでお気をつけ下さい。

 

以前の店から移転になって駅から遠くなりましたが駐車場が出来たので車の方には便利になったかもしれません。

そしてもう1つ嬉しいのが、お店の1階に以下のような光景が・・・

f:id:yasuaki-sakai:20190513185801j:plain

たまらないですね(笑)

というわけでネコ好きの方にもオススメです!

 

それでは!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

中野オクトーバーフェスト2019

f:id:yasuaki-sakai:20190507174856j:plain

こんにちは

ドイツビール大好き、吉田です。

 

ビール好きの皆様、今年もこの時期がやってまいりました!

って久々のブログ更新がビールネタで申し訳有りません(笑)

 

今年も会社の仲間とオクトーバーフェストに行ってきたのでそのご紹介です。

なお、去年の記事が気になる方は以下からご覧下さい。

denen.hatenablog.com

denen.hatenablog.com

 

そして今回は中野で初開催!とのことなので中野会場に行ってきました!

www.oktober-fest.jp

 

今回私が注目したのはおそらく初上陸のモンヒスホフになります。

f:id:yasuaki-sakai:20190507175616j:plain

フランツィスカーナーなどと同じく修道僧がマークになっているんですね。

どんだけドイツの修道僧はビールが好きなのやら・・・

というわけでこちらはオリジナルを頼んでみました。

プレミアムピルスナーと呼ばれているようで、香りが良くスッキリ爽やかな感じでした!

 

そしてこちらも初上陸?のシュティーグルです。

f:id:yasuaki-sakai:20190507175934j:plain

シュティーグルゴールドブロイ!

ブランド自体は初上陸じゃないかもしれませんが、このビールは間違いなく初上陸だそうです!

ラガーらしく喉越しがよくグビグビいけちゃう感じでした。

 

はい、というわけでビールの紹介でした(笑)

中野駅の近くに大きい公園が有るのは知らなかったのですが、とても楽しめました。

今回はお台場と同時開催でしたが、中野の方が行きやすくてそれも良かったです(笑)

なお、12日までは開催しているようなので気になった方は行ってみてはいかがでしょうか?

 

そしていつものように次回開催を調べてみたら衝撃の事実が・・・

www.oktober-fest.jp

なんと日比谷公園で5月17日(金)~5月26日(日)に開催されるそうです。

いくらなんでもペース早すぎませんか・・・

さすがに私は行くかわかりません(笑)

でも、ドイツビール最高!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

高輪”ガードウェイ” を通過してきました。

こんにちは!

最近通勤定期を買うよりも東京メトロ24時間券+私鉄区間の回数券で通勤する方が安いのではと考えております、テレコム第一チームの森村です。

 

本当はこの話でブログを書こうと思ったのですが、検証とかが面倒そうだったので辞めました。

東京メトロの定期って、元を取るには往復で考えると月1×日以上利用する必要があり、しかも定期に記載されたルート通りにしか乗れないので、乗車駅・下車駅が同じでも途中の乗換が改札内乗り換えか改札外乗り換えかで・・・というような内容を書く予定でした。

しかし、定期利用区間によって元を取れるのは月1×日以上という日数も変われば、1・3・6ヶ月定期の どれを いつ買うか でも変わってくるので、ちゃんとした内容にしようとすると論文でも書くのか?というくらい調べる必要がありそうだと思いまして・・・

このままだと話が脱線したままになりそうなので、本題に入っていきます!

 

突然ですが、皆さんは東京都内に桁下が1.5mしかないアンダーパスがあることをご存知でしょうか?

 

f:id:yasuaki-sakai:20190308153417j:plain

 

都営浅草線泉岳寺駅・JR高輪ゲートウェイ駅(2020年開業予定)付近にある、「高輪ガードウェイ」(←勝手に命名) です。

 

過去には、国内刑事ドラマ史上最高傑作の「西部警察」のロケも行われた?という情報もあります。

第75話で、阿藤快演じる犯人グループが、石原裕次郎演じる木暮課長のガゼール※を逃走用車両として要求し、パトカーの追跡を振り切るために天井の低いトンネルに逃げ込むシーンがあるのですが、それがここではないかと。

※木暮課長のガゼールは屋根を切ったオープン仕様で、純正車高より30cm低いためにトンネルをくぐれるという設定

 

f:id:yasuaki-sakai:20190308161331j:plain

 

もしロケ地がここだとしたら、同じ場所を同じオープンカー(車種は全然違いますが)で通ったということになりますね!

オープンカーといっても、ハードトップつけているので屋根開かないのですが。

 

そして、”全高の低いスポーツカーでも天井までこの高さ!” ということをアピールしたかったのですが、

「意外とゆとりあるじゃん。」と思われた方もいると思うのでこちらの写真↓

f:id:yasuaki-sakai:20190308153719j:plain

 

頭上げると天井にぶつかるので、歩行者と前を走るバイクの人が前傾姿勢になっていますね。因みに前走っているバイクは公共チームの秋田です。押忍!

 

 

過去にタクシーの屋根についている提灯がぶつかり破損したという話から、俗名 ”提灯殺しのガード” とも呼ばれているこの道。

 

そんな高輪ガードウェイですが、高輪ゲートウェイ駅開業に伴う再開発によって通行できなくなってしまうという情報があります。行った時も工事のお知らせの看板が出ていました。

 

西部警察ファンとしては実際に通っておきたかったので、通れなくなる前に通ることが出来てよかったです!

 

西部警察ファンの方、天井の低い場所が好きな方、ジョイント音が好きな音鉄の方・・・

通行止めとなる前に行かれてみてはいかがでしょうか?

 

車・バイクで行かれる場合は、全高1.5m以下であることはもちろんのこと、

  • 一方通行であること
  • 速度抑制用にキャッツアイが埋め込まれており、西部警察並みの速度出すと跳ねたり、サスペンション傷めたりすること

に気を付けて走行してくださいね。

以上、西部署からのお知らせでした。

それでは。

 

書いた人:テレコム第一チーム 森村

f:id:yasuaki-sakai:20171002124735j:plain

Android の WebView でも alert や confirm に対応してみた

f:id:yasuaki-sakai:20190213110415p:plain

こんにちは、イノベーションオフィスの吉田です。

最近くしゃみがよく出るのですが皆さんは大丈夫でしょうか?

先日の Swift に続き今度は Android も触る機会が有ったのでまとめてみたいと思います。

Swift の記事はこちらです。

denen.hatenablog.com

 

というわけで、Android の WebView もそのままでは alert や confirm に対応してくれていないので実装していきましょう。

早速コードです。

private WebView webView1;

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webView1 = new WebView(this);
    webView1.getSettings().setJavaScriptEnabled(true);
    webView1.getSettings().setUserAgentString("My Browser App");

    webView1.setWebViewClient(new WebChromeClient()  {
        @Override
        public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
            new AlertDialog.Builder(myApp.getContext())
                    .setTitle("My Browser App")
                    .setMessage(message)
                    .setPositiveButton(android.R.string.ok,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    result.cancel();
                                }
                            })
                    .create()
                    .show();
                return true;
        }
@Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { new AlertDialog.Builder(myApp.getContext()) .setTitle("My Browser App") .setMessage(message) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.confirm(); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.cancel(); } }) .create() .show(); return true; } }); setContentView(webView1); webView1.loadUrl("https://www.google.co.jp/"); }

ちょっと長いですが、そんなに難しいことはやっていないかと思います。

setWebViewClient というメソッドに onJsAlert や onJsConfirm というメソッドを持った WebChromeClient クラスを渡してやる感じですね。

 

そして Android だと AndroidManifest.xml に以下の記述を入れるのを忘れないようにしてください。

    <uses-permission android:name="android.permission.INTERNET" />

以上、参考になれば幸いです。

 

それでは。

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

Swift 4 の WKWebView でタブブラウザに必要そうな機能を試してみた

f:id:yasuaki-sakai:20190213110415p:plain

こんにちは、イノベーションオフィスの吉田です。

先日 Swift 4 で WKWebView を使う機会が有ったのでもうちょっと触ってみました。

ちなみに前回の記事はこちらです。

denen.hatenablog.com

 

今回は Tab Bar を使って2つの WKWebView を配置し、1つめの WKWebView で新しいウィンドウを開く動作が行われた時に2つめの WKWebView に表示するということを試してみました。

Storyboard はこんな感じになります。

f:id:yasuaki-sakai:20190219112938p:plain

Tab Bar を設置して、Tab Bar Item を2つ配置しています。

Tab Bar Item には対応した Container View が用意されています。

それではコードを見ていきましょう。

import UIKit
import WebKit

class ViewController: UIViewController, UITabBarDelegate, WKUIDelegate, WKNavigationDelegate {
    
    @IBOutlet weak var myTabBar: UITabBar!
    @IBOutlet weak var myContainerView1: UIView!
    @IBOutlet weak var myContainerView2: UIView!

    let wkWebView1 = WKWebView()
    let wkWebView2 = WKWebView()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        myContainerView1.isHidden = false
        myContainerView2.isHidden = true
        
        ...
        
        wkWebView1.frame = myContainerView1.frame
        myContainerView1.addSubview(wkWebView1)
        wkWebView1.load(request1 as URLRequest)

        let urlString2 = "https://www.yahoo.co.jp/"
        let encodeUrlString2 = urlString2.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
        
        let url2 = NSURL(string: encodeUrlString2!)
        let request2 = NSURLRequest(url: url2! as URL)
        
        wkWebView2.customUserAgent = userAgentStr

        wkWebView2.frame = myContainerView2.frame
        myContainerView2.addSubview(wkWebView2)
        wkWebView2.load(request2 as URLRequest)
	
        myTabBar.selectedItem = myTabBar.items![0]
        myTabBar.delegate = self
    }

    func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem){
        switch item.tag {
        case 1:
            myContainerView1.isHidden = false
            myContainerView2.isHidden = true
        case 2:
            myContainerView1.isHidden = true
            myContainerView2.isHidden = false
        default:
            return
        }
    }

    ...

    func webView(_ webView: WKWebView,
                 createWebViewWith configuration: WKWebViewConfiguration,
                 for navigationAction: WKNavigationAction,
                 windowFeatures: WKWindowFeatures) -> WKWebView?
    {
        if navigationAction.targetFrame?.isMainFrame != true {
            wkWebView2.load(navigationAction.request)
            myTabBar.selectedItem = myTabBar.items![1]
            myContainerView1.isHidden = true
            myContainerView2.isHidden = false
        }
        return nil
    }
    
}

前回と同じ部分は省いています。

前回は WKWebView を view に追加していましたが、今回は MyContainerView に追加しています。

そして WKWebView は新しいウィンドウが開かれる時はデフォルトでは何もしてくれません。

なので navigationAction を実装してあげる必要が有るんですね。

 

あとは Tab Bar のタップ時の処理も追加している感じです。

これでなんとなくの動作が掴めたでしょうか?

実際にタブブラウザを作るとなるともっと色々考えないといけないですが、参考になれば幸いです。

 

それでは。

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

Swift 4 の WKWebView で alert や confirm に対応してみた

f:id:yasuaki-sakai:20190213110415p:plain

こんにちは、イノベーションオフィスの吉田です。

最近 Swift 4 で WKWebView を使う機会が有ったのでメモ的投稿です。

 

WebView を使うとアプリが簡単に作れて便利なのですが、 JavaScript の alert や confirm にデフォルトでは対応してくれていませんでした。

というわけでざっと調べてみたのですが Swift 4 で対応している記事が見つからなかったので書いてみました。

早速コードになります。

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {
    
    let wkWebView1 = WKWebView()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let urlString1 = "https://www.google.co.jp/"
        let encodeUrlString1 = urlString1.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
        
        let url1 = NSURL(string: encodeUrlString1!)
        let request1 = NSURLRequest(url: url1! as URL)
        
        let userAgentStr = "My Browser App"
        wkWebView1.customUserAgent = userAgentStr
        
        wkWebView1.uiDelegate = self
        wkWebView1.navigationDelegate = self
        
        wkWebView1.frame = view.frame
        view.addSubview(wkWebView1)
        wkWebView1.load(request1 as URLRequest)
    }

    // alert対応
    func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
        let alertController = UIAlertController(title: "", message: message, preferredStyle: .alert)
        let otherAction = UIAlertAction(title: "OK", style: .default) {
            action in completionHandler()
        }
        alertController.addAction(otherAction)
        present(alertController, animated: true, completion: nil)
    }
    
    // confirm対応
    func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
        let alertController = UIAlertController(title: "", message: message, preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) {
            action in completionHandler(false)
        }
        let okAction = UIAlertAction(title: "OK", style: .default) {
            action in completionHandler(true)
        }
        alertController.addAction(cancelAction)
        alertController.addAction(okAction)
        present(alertController, animated: true, completion: nil)
    }
    
    // prompt対応
    func webView(_ webView: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void) {
        
        // variable to keep a reference to UIAlertController
        let alertController = UIAlertController(title: "", message: prompt, preferredStyle: .alert)
        
        let okHandler: () -> Void = {
            if let textField = alertController.textFields?.first {
                completionHandler(textField.text)
            } else {
                completionHandler("")
            }
        }
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) {
            action in completionHandler("")
        }
        let okAction = UIAlertAction(title: "OK", style: .default) {
            action in okHandler()
        }
        alertController.addTextField() { $0.text = defaultText }
        alertController.addAction(cancelAction)
        alertController.addAction(okAction)
        present(alertController, animated: true, completion: nil)
    }
    
}

WKUIDelegate を継承して、alert / confirm / prompt を引っ掛けてあげる感じですね。

参考になれば幸いです。

 

それでは。

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain