【发布时间】:2019-12-11 14:26:37
【问题描述】:
大家好,
我被这个问题困扰了好几天,我找不到任何解决方案,也许你可以帮助我..
我创建了一个使用 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 是否仅适用于内部脚本?
希望你能帮帮我, 亲切的问候
【问题讨论】:
-
你好,你的意思是
handleLogin存在于webview中,需要原生ios响应吗?你可以看看this discussion。 -
基本上是的,handleLogin 已经存在于 web 视图中,我可以从 Android 以及 safari 浏览器内的控制台访问它。不幸的是,EvaluateJavascript 告诉我这个方法是未定义的,即使它显然不是。已经查看了讨论,我是这样实现的,但是我的 wkwebview 似乎处理它的方式不同..
-
你可以先用本地的html文件试试看是否有效,可能网站不支持javascript。
-
是的,我会试试的!
标签: javascript webview xamarin.ios wkwebview