読者です 読者をやめる 読者になる 読者になる

latest log

酩酊状態で書いたエンジニアポエムです。酩酊状態で読んでください。

ForceClick.js disable the force click in link navigation of iPhone 6s. (リンクの先読み機能を無効化)

ForceClick.js は force click によるリンクの先読み機能を無効化するライブラリです。

iPhone 6s の Safari <a href="..."> をクリックすると、3通りのアクションが発生することはご存知でしょうか?

  1. 軽くタッチすると、そのリンクをそのタブで開きます。(open link)
  2. 長くタッチすると、コンテキストメニューが開き、選択肢が表示されます (longpress, open contextmenu)
  3. 強く押すと、モーダルダイアログが開き、リンク先のページのプレビューが表示されます (force click on link navigation)

3番目の Force touch(3D touch)は iPhone 6s から追加された機能です。
Apple の説明(実際にアクセスする前に、ウェブサイトを見てみる)も確認してください

通常は便利な機能なのですが、非常に邪魔になるケース(重大な副作用)も見つかっています。

WebGameにおける重大な副作用

リンク先がゲームの戦闘画面だとしましょう。
そのような状況でリンクを強くクリックすると、戦闘が始まりユーザは何もできずにすぐに終了してしまいます。
恐らくサーバには「戦闘は終了した。ユーザは行動力を1消費した」と記録されます。
一方でユーザは戦闘を最後まで行ったという自覚が残らず、「なんだこのクソゲー!!」になります。

許諾や支払いを行う画面における重大な副作用

リンク先がYES/NOなどの選択肢を含む画面だとしましょう。
リンクを強くクリックすると、やはりすぐに画面が閉じてしまいます。ユーザは何もできません。
これをブラウザバックが発生したと検知し「ユーザが不正な操作を行った」と警告を表示してしまったり、トランザクションがキャンセルされてしまうケースが考えられます。
商品購入確認画面でこれが起きると、ユーザもサービスも lose-lose です。大変困ってしまいますし、 ユーザには最後まで手続きを行ったという自覚も残らず、問い合わせも来てしまいます。

force click をOFFにするお手軽な手段は今のところ提供されていません

色々見た感じですと、WebKit のエンジニアはこの副作用にまだ気がついていないようです。
<meta ...> で封印する方法は存在せず、-webkit-touch-callout:none-webkit-user-select: none のようにCSS で封印する方法も見つけられませんでした。

Next Action

ForceClick.js でユースケースがある程度カバーできる事が確認できたら、次は WebKit(Apple)に対して機能追加(改善)要求を出して行こうかと考えています。

(ε・ ワ ・)з 遠慮せず手伝ってくれてもええんやで…