我在这个问题上困扰了好几天,我找不到任何解决方案,也许您可以帮帮我。.
我创建了一个使用WKWebview连接到网站的应用。登录是在iOS上进行的本机登录,在用户颁发了凭据之后,我也想在网页上登录。
因此,我的网页具有一个称为“ handleLogin”的Javascript函数,在该函数中,我会收到凭据,用户不必再次登录即可直接进入其主页。
我已经尝试了几种方法,在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是否仅适用于内部脚本?
希望您能帮助我,亲切的问候
用户脚本
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)