Swift: распечатайте Html-заголовок WebView, используя Swift и JavaScriptCore

У меня есть данные .html в моем проекте Xcode: введите здесь описание изображения

Я пытаюсь прочитать значение заголовка, используя обе эти строки:

document.title 
document.getElementsByTagName(\"title\")[0].innerHTML; 

но он только печатает:

результат: не определено

import UIKit
import JavaScriptCore
class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view, typically from a nib.
    let myWebView:UIWebView = UIWebView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height))
    let localfilePath = NSBundle.mainBundle().URLForResource("home", withExtension: "html");
    let myRequest = NSURLRequest(URL: localfilePath!);
    myWebView.loadRequest(myRequest);

    //let jsSource = "var testFunct = function(message) { return document.title;}"
    let jsSource = "var testFunct = function(message) { return document.getElementsByTagName(\"title\")[0].innerHTML;}"

    let context = JSContext()
    context.evaluateScript(jsSource)
    let testFunction = context.objectForKeyedSubscript("testFunct")
    let result = testFunction.callWithArguments(["the message"])
    print("result is: \(result)")

    self.view.addSubview(myWebView)
}

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

person user1019042    schedule 28.05.2016    source источник


Ответы (1)


Не используйте UIWebView для нового кода, предназначенного для iOS 8 и выше, вместо этого используйте WKWebView. Apple сообщает об этом в UIWebView Documentation:

В приложениях, работающих в iOS 8 и более поздних версиях, используйте класс WKWebView вместо UIWebView. Кроме того, рассмотрите возможность установки для свойства WKPreferences javaScriptEnabled значения NO, если вы визуализируете файлы, которые не должны запускать JavaScript.

А вот как вы можете оценить Javascript с помощью WKWebView:

self.webView.evaluateJavaScript("document.title") { result, error in
    print(result!)
}
person Code Different    schedule 28.05.2016