Daniele B
12/05/2025, 6:05 AMDaniele B
12/05/2025, 6:06 AM@OptIn(ExperimentalResourceApi::class, ExperimentalForeignApi::class)
@Composable
actual fun ResultsButtonPopupWebview(url: String, onWebviewLoaded: () -> Unit, onItemClick: (url: String) -> Unit) {
var isLoaded by remember { mutableStateOf(false) }
val delegate = remember {
object : NSObject(), WKNavigationDelegateProtocol {
override fun webView(
webView: WKWebView,
didFinishNavigation: WKNavigation?
) {
isLoaded = true
onWebviewLoaded()
}
}
}
val searchHandler = remember {
object : NSObject(), WKURLSchemeHandlerProtocol {
@ObjCSignatureOverride
override fun webView(
webView: WKWebView,
startURLSchemeTask: WKURLSchemeTaskProtocol
) {
println("TEST startURLSchemeTask: " + startURLSchemeTask.request.URL?.absoluteString)
onItemClick(startURLSchemeTask.request.URL?.absoluteString ?: "")
}
@ObjCSignatureOverride
override fun webView(
webView: WKWebView,
stopURLSchemeTask: WKURLSchemeTaskProtocol
) {
}
}
}
UIKitView(
modifier = Modifier
.fillMaxSize()
.alpha(if (isLoaded) 1f else 0f), // hide while loading
factory = {
WKWebView().apply {
navigationDelegate = delegate
loadRequest(NSURLRequest(uRL = NSURL(string = url)))
val preferences = WKPreferences()
preferences.javaScriptEnabled = true
val config = WKWebViewConfiguration()
config.preferences = preferences
config.setURLSchemeHandler(searchHandler, "search")
}
},
)
}Daniele B
12/05/2025, 6:06 AMDaniele B
12/05/2025, 7:12 AMUIKitView(
modifier = Modifier
.fillMaxSize()
.alpha(if (isLoaded) 1f else 0f), // hide while loading
factory = {
val preferences = WKPreferences()
preferences.javaScriptEnabled = true
val config = WKWebViewConfiguration()
config.preferences = preferences
config.setURLSchemeHandler(searchHandler, "search")
WKWebView(frame = CGRectZero.readValue(), configuration = config).apply {
navigationDelegate = delegate
loadRequest(NSURLRequest(uRL = NSURL(string = url)))
}
},
)