相关疑难解决方法(0)

与WKWebView的JavaScript同步本机通信

使用WKWebView可以在JavaScript和Swift/Obj-C本机代码之间进行同步通信吗?

这些是我尝试过但失败的方法.

方法1:使用脚本处理程序

WKWebView接收JS消息的新方法是使用userContentController:didReceiveScriptMessage:从JS调用的委托方法window.webkit.messageHandlers.myMsgHandler.postMessage('What's the meaning of life, native code?') .这种方法的问题是在执行本机委托方法时,JS执行没有被阻止,所以我们不能通过立即调用webView.evaluateJavaScript("something = 42", completionHandler: nil).

示例(JavaScript)

var something;
function getSomething() {
    window.webkit.messageHandlers.myMsgHandler.postMessage("What's the meaning of life, native code?"); // Execution NOT blocking here :(
    return something;
}
getSomething();    // Returns undefined
Run Code Online (Sandbox Code Playgroud)

示例(Swift)

func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
    webView.evaluateJavaScript("something = 42", completionHandler: nil)
}
Run Code Online (Sandbox Code Playgroud)

方法2:使用自定义URL方案

在JS中,重定向使用window.location = "js://webView?hello=world"调用本机 WKNavigationDelegate方法,其中可以提取URL查询参数.但是,与UIWebView不同,委托方法不会阻止JS执行,因此立即调用evaluateJavaScript将值传递回JS也不起作用.

示例(JavaScript)

var something;
function getSomething() {
    window.location …
Run Code Online (Sandbox Code Playgroud)

swift ios8 wkwebview

26
推荐指数
2
解决办法
2万
查看次数

Android的iOS中的addJavascriptInterface等价物

您可能知道,Android的WebView有一个名为的方法addJavascriptInterface(),它将Android JAVA对象导入Javascript上下文.

问题是,iOS上有没有相同的东西?

android uiwebview webview android-webview ios

12
推荐指数
1
解决办法
4056
查看次数

标签 统计

android ×1

android-webview ×1

ios ×1

ios8 ×1

swift ×1

uiwebview ×1

webview ×1

wkwebview ×1