web-dev-qa-db-ja.com

WKWebviewでは、LinkPreviewをfalseにするとテキストの選択が解除されます

WKWebviewを使用するアプリがありますが、リンクのプレビュー動作が必要ないため、allowsLinkPreviewfalseに設定します。 iOS 13.4以降、3Dタッチ機能がないデバイス(古いデバイスと新しいiPhoneモデル)では、allowsLinkPreviewをfalsealsoは、ページ内のすべてのテキスト選択を無効にします!私たちのアプリでは、テキストの選択が非常に重要です。

私はこの理論を行の間で読んだ ドキュメント: を思いついた

IOSでは、このプロパティは3D Touchをサポートするデバイスで使用できます。

IOS 13以降を実行しているデバイスでは、デバイスが3Dタッチをサポートしているかどうかに関係なく、タッチアンドホールドジェスチャーを使用してコンテキストメニューを開くことができます。 3D Touchデバイスでは、ジェスチャーによりコンテキストメニューがより迅速に表示されます。

リンクのプレビューを無効にすると、Webviewでallの押し続けるジェスチャーが無効になるバグのようです。

私が思いついた唯一の回避策は、allowsLinkPreviewtrueに設定し、次に WKUIDelegate protocol を使用してコンテキストメニューを無効にすることです。これにより、クリックされたリンクのポップアップが無効になりますが、クリックされた画像のポップアップは無効になりません。また、ユーザーがリンクをSafariの分割画面ビューにドラッグアンドドロップすることもできますが、これは望ましくありません。

リンクのプレビュー/コンテキストメニュー/ドラッグドロップ動作を完全に無効にしながら、テキストの選択を許可する方法についての提案は、いただければ幸いです。

[〜#〜]更新[〜#〜]
アプリのコンテンツを制御しているので、次のcssを使用して画像のプレスホールドを無効にすることができました:-webkit-touch-callout: none;したがって、私の残りの問題は、WKWebViewからのアプリ外へのドラッグ操作を許可しないことです。

UPDATE 2同様に、-webkit-user-drag: none;リンクのドラッグを無効にしますが、Appleバグのように思われる場合は、css以外の修正を知っておくと役立ちます。

4
Jon Brooks

私は同じ問題に遭遇し、これが私がそれを解決した方法です。

wkwebview.UIDelegate = self;

...

- (BOOL)webView:(WKWebView *)webView shouldPreviewElement:(WKPreviewElementInfo *)elementInfo API_AVAILABLE(ios(10.0)) {
    return NO;
}
1
XSDCoder