Swift webview: Jak poprawnie wywołać kod Swift z javascript?
Próbuję zmusić mój javascript do interakcji z szybkim kodem, ale niestety mi się to nie udało.
Na razie próbowałem tylko zmienić kolory nagłówka i wyświetlić komunikat, jak zobaczysz w poniższym kodzie.
Oto mój kod (
index.html
) :
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta charset="UTF-8">
</head>
<body>
[b]WebView Test[/b]>
<script type="text/javascript" src="main.js"></script>
</body>
</html>
Oto mój kod (
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";
}
Oto mój kod (
ViewController.swift
) :
import UIKit
import WebKitclass 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.
}
}
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
2 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
następnie
a konkretnie