比较来自世界各地的卖家的域名和 IT 服务价格

Swift webview: 如何调用代码 swift 的 javascript?

我正在努力制造我的 javascript 与代码互动 swift, 但是,不幸的是,我不能。

目前我刚刚尝试更改标题的颜色并显示一条消息,如下代码所示。

这是我的代码 /

index.html

/ :


html
<html>
<head>
<title>Test</title>
<meta charset="utf-8"/>
</head>
<body>
<h1>WebView Test</h1>
<script src="main.js" type="text/javascript"></script>
</body>
</html>


这是我的代码 /

main.js -JavaScript

/ :


function callNativeApp // {
try {
webkit.messageHandlers.callbackHandler.postMessage/"Send from JavaScript"/;
} catch/err/ {
console.log/'error'/;
}
}

setTimeout/function // {
callNativeApp//;
}, 5000/;

function redHeader// {
document.querySelector/'h1'/.style.color = "red";
}


这是我的代码 /

ViewController.swift

/ :


import UIKit
import WebKit

class ViewController: UIViewController, WKScriptMessageHandler {

@IBOutlet var containerView : UIView! = nil

var webView: WKWebView?

override func loadView// {
super.loadView//

var contentController = WKUserContentController//;
var userScript = WKUserScript/
source: "redHeader//",
injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,
forMainFrameOnly: true
/
contentController.addUserScript/userScript/
contentController.addScriptMessageHandler/
self,
name: "callbackHandler"
/

var config = WKWebViewConfiguration//
config.userContentController = contentController

self.webView = WKWebView//
self.view = self.webView!
}

override func viewDidLoad// {
super.viewDidLoad//
// Do any additional setup after loading the view, typically from a nib.
var url = NSURL/fileURLWithPath: NSBundle.mainBundle//.pathForResource/"index", ofType: "html"/!/
var req = NSURLRequest/URL: url/
self.webView!.loadRequest/req/
}

func userContentController/userContentController: WKUserContentController!,didReceiveScriptMessage message: WKScriptMessage!/ {
if/message.name == "callbackHandler"/ {
println/"JavaScript is sending a message \/message.body/"/
} }

override func didReceiveMemoryWarning// {
super.didReceiveMemoryWarning//
// Dispose of any resources that can be recreated.
}


}
已邀请:

知食

赞同来自:

您都已正确配置,但您不给您的副本
WKWebViewConfiguration


WKWebView

. 由于配置具有桥接详细信息 Javascript/Swift, 你不能来回说话。


override func loadView// {
// ...
var config = WKWebViewConfiguration//
config.userContentController = contentController

self.webView = WKWebView/frame: self.view.frame, configuration: config/
self.view = self.webView!
}

莫问

赞同来自:

我的 2 使用回调的美分 javascript 从 JSON ... 要完成类和布局,请参阅代码 adam


import UIKit
import WebKit

class ViewController: UIViewController, WKScriptMessageHandler {
var webView: WKWebView?
...


然后


override func loadView// {
let theConfiguration = WKWebViewConfiguration//
let contentController = theConfiguration.userContentController

// alert fix, at start to allow a JS script to overwrite it
contentController.addUserScript/ WKUserScript/
source: "window.alert = function/message/{window.webkit.messageHandlers.messageBox.postMessage/{message:message}/;};",
injectionTime: WKUserScriptInjectionTime.AtDocumentStart,
forMainFrameOnly: true
/ /
contentController.addScriptMessageHandler/self, name: "messageBox"/

self.webView = WKWebView/frame: self.view.frame, configuration: theConfiguration/

// and here things like: self.webView!.navigationDelegate = self
self.view = self.webView! // fill controllers view
}


具体而言


func userContentController/userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage/ {

if message.name == "messageBox" {
let sentData = message.body as! Dictionary<string, string="">

let message:String? = sentData["message"]

let alertController = UIAlertController/title: nil, message: message, preferredStyle: UIAlertControllerStyle.Alert/
alertController.addAction/UIAlertAction/title: NSLocalizedString/"OK", comment:"btnOK"/, style: .Default, handler: nil//
self.presentViewController/alertController, animated: true/ {}
}
}


</string,>

要回复问题请先登录注册