ForceClick.js は force click によるリンクの先読み機能を無効化するライブラリです。
iPhone 6s の Safari <a href="...">
をクリックすると、3通りのアクションが発生することはご存知でしょうか?
- 軽くタッチすると、そのリンクをそのタブで開きます。(open link)
- 長くタッチすると、コンテキストメニューが開き、選択肢が表示されます (longpress, open contextmenu)
- 強く押すと、モーダルダイアログが開き、リンク先のページのプレビューが表示されます (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)に対して機能追加(改善)要求を出して行こうかと考えています。
(ε・ ワ ・)з 遠慮せず手伝ってくれてもええんやで…