Когда пользователь выполняет жест касания и удержания, чтобы выбрать слово, а затем перетаскивает свой палец к верхнему или нижнему краям экрана, страница автоматически прокручивается, чтобы удовлетворить выбор.
вот короткий клип, демонстрирующий это
Я бы хотел предотвратить это поведение внутри WKWebView
.
Вот что я пробовал до сих пор:
в файле bridge.js
, который доступен для веб-просмотра:
var shouldAllowScrolling = true;
document.addEventListener('selectionchange', e => {
shouldAllowScrolling = getSelectedText().length === 0;
window.webkit.messageHandlers.selectionChangeHandler.postMessage(
{
shouldAllowScrolling: shouldAllowScrolling
});
console.log('allow scrolling = ', shouldAllowScrolling);
});
, а затем в реализации WKScriptMessageHandler
:
public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage)
{
switch message.name
{
case "selectionChangeHandler":
let params = paramsDictionary(fromMessageBody: message.body)
let shouldEnableScrolling = params["shouldAllowScrolling"] as? Bool ?? true
cell?.webView.scrollView.isScrollEnabled = shouldEnableScrolling
cell?.webView.scrollView.isUserInteractionEnabled = shouldEnableScrolling // not together with the line above
default:
fatalError("\(#function): received undefined message handler name: \(message.name)")
}
}
Аналогичным образом я попытался вызвать * Функция 1020 * работает непосредственно в файле javascript для нескольких событий, а именно scroll
и touchmove
, например так:
document.addEventListener('touchmove', e => {
if (!shouldAllowScrolling) {
e.preventDefault()
}
}, {passive: false});
оба метода успешно предотвращают прокрутку при выделении некоторого текста, но не отвергни поведение, описанное в самом верху моего вопроса.
Я могу принимать решения либо в Swift, либо в JavaScript, либо в комбинации обоих.