WKUserScript не работает

Вот как я настраиваю конфигурацию WKWebView,

func configWeb() {
        let recentconfig = WKWebViewConfiguration()
        let recentscriptURL = Bundle.main.path(forResource: "getPosts", ofType: "js")
        let recentscriptContent = try! String(contentsOfFile: recentscriptURL!)
        let recentscript = WKUserScript(source: recentscriptContent, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
        let userContentController = WKUserContentController()
        userContentController.add(self as WKScriptMessageHandler, name: "test")
        userContentController.addUserScript(recentscript)
        recentconfig.userContentController = userContentController
        postsWebView = WKWebView(frame: CGRect.zero, configuration: recentconfig)
        postsWebView!.load(URLRequest(url:URL(string:"http://www.appcoda.com")!))
        postsWebView?.navigationDelegate = self
}

Мой файл getPosts.js что-то вроде этого,

var postsWrapper = document.querySelector('#content')
var posts = postsWrapper.querySelectorAll('.post.type-post.status-publish')
function parsePosts() {
    pos = []
    for (var i = 0; i < posts.length; i++) {
        var post = posts[i];
        var postTitle = post.querySelector('h2.entry-title a').textContent;
        var postURL = post.querySelector('h2.entry-title a').getAttribute('href');
        pos.push({'postTitle' : postTitle, 'postURL' : postURL});
    }
    return pos
}
var postsList = parsePosts();
window.webkit.messageHandlers.test.postMessage(postsList);

Также, userContentController(_ userContentController:, didReceive:) не будет называться. Я узнал об этом из учебника AppCoda. Я не уверен, где я иду не так. Это способ получить JS? Я пробовал несколько уроков. У меня нет ничего, что работает для меня.

Так, userContentController(_ userContentController:, didReceive:) следующее,

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        print(message.body, message.name)
        if (message.name == MessageHandler) {
            if let postsList = message.body as? [Dictionary<String, Any>] {
                for ps in postsList {
                    let post = Post(dictionary: ps)
                    posts.append(post)
                }
                recentPostsButton.isEnabled = true
            }
        }
    }

0 ответов

Другие вопросы по тегам