#javascript #ios #swiftui #wkwebview #uiviewrepresentable
Вопрос:
Мой SwiftUI отображает список веб-просмотров.
List
{
ForEach(0..<items.count) { index in
ItemWebView(htmlText:items[index].html) ).simultaneousGesture(
LongPressGesture()
.onEnded { _ in
MyLog("long press on item " String(index))
}
)
.highPriorityGesture(TapGesture()
.onEnded { _ in
MyLog("tap on item " String(index))
})
}
Как вы можете видеть, жесты нажатия и длительного нажатия предназначены для обнаружения.
WebView-это представление, называемое ItemWebView, которое является адаптацией WKWebView к SwiftUI.
Это можно легко сделать в соответствии с ответами StackOverflow и другими учебными пособиями в Интернете.
Такое представление правильно обрабатывает навигацию, и все методы вызываются должным образом.
После загрузки HTML, когда навигация завершена, вводится некоторый код Javascript, и он правильно выполняется.
Часть этого кода выглядит примерно так:
var children=document.body.children;
document.body.style.pointerEvents='none';
document.body.style.minHeight='1cm';
var num=children.length;
for (i=0;i<num;i ) {
var el=children[i];
el.style.pointerEvents='none';
};
window.webkit.messageHandlers.jsHandler.postMessage('onload completed');
Приведенный выше код предназначен для предотвращения выбора текста в веб-представлении жестом длительного нажатия
но вместо этого это происходит, так что
при длительном нажатии (проверено на симуляторе iOS — iOS 14.4) появляются маркеры выбора и выбирается текст.
Я не хочу, чтобы это было так.
Что случилось, как решить эту проблему?