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
}
}
}