2016-01-12 20 views
5

Tôi đang cố gắng xử lý trình xử lý tin nhắn tập lệnh WebKit tùy chỉnh. Bộ điều khiển của tôi được tải chính xác và chế độ xem là tốt. Tuy nhiên, ở phía JS (từ bảng điều khiển Safari), window.webkit.messageHandlers trống. Bất kỳ ý tưởng tại sao? Ứng dụng của tôi đang sử dụng iOS 8.1 nhưng thậm chí bằng cách nâng cấp lên 9.2, ứng dụng đó không hoạt động.Trình xử lý tin nhắn tập lệnh không hoạt động

import Foundation 
import UIKit 
import WebKit 

public class FooController: UIViewController, WKScriptMessageHandler { 
    private var wkWebView: WKWebView? 

    public override func viewDidLoad() { 
     super.viewDidLoad() 

     let o = WKUserContentController() 
     o.addScriptMessageHandler(self, name: "foo") 
     let config = WKWebViewConfiguration() 
     config.userContentController = o 

     self.wkWebView = WKWebView(frame: self.view.bounds, configuration: config) 
     self.view.addSubview(self.wkWebView!) 

     self.wkWebView!.loadRequest(NSURLRequest(URL: NSBundle.mainBundle().URLForResource("foo", withExtension: "html")!)) 
    } 

    public func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) { 
     print("foo") 
    } 
} 

Trả lời

5

webkit.messageHandlers không phải là một mảng. Đó là UserMessageHandlersNamespace.

Hãy thử

var message = {"key1":"value1", "key2":"value2", "dictionary": {"name": "foo"}} 
webkit.messageHandlers.foo.postMessage(message); 

Trong xử lý thông điệp của bạn.

public func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) { 
    let body = message.body 
    if let dict = body as? Dictionary<String, AnyObject> { 
     print(dict) 
    } 
} 
+0

Hey Onato, cảm ơn vì câu trả lời của bạn. Tôi biết 'messageHandlers' là một đối tượng. Nhưng nó không có chìa khóa ở tất cả, và đặc biệt là 'foo' là mất tích. –

+1

Mã nhanh chóng của bạn hoạt động tốt cho tôi. Bạn có thể đăng bài như thế nào bạn đang gọi xử lý tin nhắn của bạn hoặc kiểm tra sự tồn tại của "foo"? – Onato

+0

Arf. Chỉ cần kiểm tra lại và nó hoạt động tốt. Xin lỗi vì sự nhầm lẫn. Tuy nhiên, tôi có một vấn đề khác ngay bây giờ. Tôi không thể đăng bất kỳ dữ liệu tùy chỉnh nào. Tôi đã cố gắng để đăng một từ điển với 2 chuỗi và một từ điển khác và cơ thể tôi nhận được chỉ bao gồm một chuỗi duy nhất. Không phải là một vấn đề lớn, nhưng bạn có biết gì về điều đó không? –

-1

Trong mã javascript dưới đây, thông báo là bắt buộc.

var message = {"key1":"value1", "key2":"value2", "dictionary": {"name": "foo"}} 
webkit.messageHandlers.foo.postMessage(message); 

Các mã javascript sau,

webkit.messageHandlers.foo.postMessage();

không gọi func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage)

Các vấn đề liên quan