如何在WKWebview中执行Javascript函数?

问题描述 投票:0回答:1

你好社区,

我在这个问题上困扰了好几天,我找不到任何解决方案,也许您可​​以帮帮我。.

我创建了一个使用WKWebview连接到网站的应用。登录是在iOS上进行的本机登录,在用户颁发了凭据之后,我也想在网页上登录。

因此,我的网页具有一个称为“ handleLogin”的Javascript函数,在该函数中,我会收到凭据,用户不必再次登录即可直接进入其主页。

现在,我想从WKWebview中的本机代码调用handleLogin()。

我已经尝试了几种方法,在Android上可以轻松实现:

view.LoadUrl(“ javascript:(handleLogin(placeholder))”);

在iOS中,我已经在内部尝试过public override async void DidFinishNavigation(WKWebView webView, WKNavigation navigation)与:

等待webView.EvaluateJavaScriptAsync(“ handleLogin(credentialsPlaceholder);”);

但是我得到的唯一结果是一个例外:

Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=0, WKJavaScriptExceptionMessage=TypeError: undefined is not a function, WKJavaScriptExceptionColumnNumber=0, NSLocalizedDescription=A JavaScript exception occurred}'

可能是我必须等待更长的时间才能加载所有内容吗?我确定handleLogin存在,并在Android和浏览器中进行测试,如何将其不确定?EvaluateJavascript是否仅适用于内部脚本?

希望您能帮助我,亲切的问候

javascript webview xamarin.ios wkwebview
1个回答
0
投票
来源:read more

用户脚本

WKUserScript对象,当添加到userContentController时,允许开发人员获取JavaScript并将其注入到网页中。这是添加脚本以从上方更改Google网页背景颜色的简单示例:

let contentController = WKUserContentController() let scriptSource = "document.body.style.backgroundColor = `red`;" let script = WKUserScript(source: scriptSource, injectionTime: .atDocumentEnd, forMainFrameOnly: true) contentController.addUserScript(script) let config = WKWebViewConfiguration() config.userContentController = contentController let webView = WKWebView(frame: .zero, configuration: config)
© www.soinside.com 2019 - 2024. All rights reserved.