【问题标题】:How to execute a Javascript function inside WKWebview?如何在 WKWebview 中执行 Javascript 函数?
【发布时间】: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


【解决方案1】:

找到一些可能有帮助的信息

来源: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)

【讨论】:

  • 感谢您的快速响应!问题是,我实际上并不想添加或注入 Javascript,我只想调用网站上已经存在的函数。 HandleLogin 在 webviews 端,我只想调用它.. 无需更改或注入脚本:/
猜你喜欢
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多