ios - 向 WKWebView 发送数据

标签 ios objective-c iphone swift wkwebview

我正在创建一个显示本地网页的 View ,该网页还具有样式和 JavaScript(本质上是混合 native 应用程序),并且我正在使用 WKWebView。

我知道如何将数据从 JavaScript 发送到 native 代码,但不清楚如何以相反的方式进行。我想将使用 native iOS 代码获取的 JSON 对象发送到我的 MKWebView。

我收到以下错误

Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo=0x7bfb3c30 {NSLocalizedDescription=A JavaScript exception occurred}
    nil

下面是我的代码。

//
//  WebViewController.swift
//
//  Created by Adam Bulmer on 09/03/2015.
//  Copyright (c) 2015 Adam Bulmer. All rights reserved.
//

import Foundation
import WebKit

class WebViewController: BaseViewController, WKScriptMessageHandler, WKNavigationDelegate {

    @IBOutlet var containerView : UIView! = nil
    var webView: WKWebView!

    override func loadView() {

        super.loadView()

        var config = WKWebViewConfiguration();
        var contentController = WKUserContentController();

        var userScript = WKUserScript(
            source: "bootstrap()",
            injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,
            forMainFrameOnly: true
        )

        contentController.addUserScript(userScript)
        config.userContentController = contentController;


        self.webView = WKWebView(frame:self.view.frame, configuration: config)
        self.webView.navigationDelegate = self;

        self.view = self.webView!

    }

    override func viewDidLoad() {

        super.viewDidLoad()

        var path = NSBundle.mainBundle().pathForResource(webViewName(),
            ofType: "html");

        var url = NSURL(fileURLWithPath: path!);
        var request = NSURLRequest(URL: url!);

        self.webView!.loadRequest(request);

    }

    func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {

        var param = "Hello World";
        var exec_template = "test(\(param)');";

        self.webView!.evaluateJavaScript(exec_template, completionHandler: { (test, error) -> Void in
            println(error);
            println(test);
        })

    }

    func webViewName() -> String {
        return "";
    }

// MARK: WKScriptMessageHandler callback
// Delegate callback for when scripts sends message

    func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {

    }

}

最佳答案

这段代码:

    var param = "Hello World";
    var exec_template = "test(\(param)');";

将导致..

test(Hello World');

.. 正在执行,这不是有效的 JS。您错过了代码中的开头 '

关于ios - 向 WKWebView 发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28964387/

相关文章:

ios - 我们是否应该使用观察者方法来修改 IBOutlet 属性

ios - 将自定义对象添加到 NSMutableArray

iphone - 将 UIButton 编程为切换

ios - iOS App 如何不收取带宽费用?

ios - 使用 Core Data 时需要本地数组吗?

ios - 为 iPad 编写应用程序

objective-c - 阅读 Objective-C 中的 Stacktrace?

php - Objective-C 和 PHP 中的 POST 方法

iOS Google+ 获取好友数量

iphone - 在不适用于 iPhone 5.1 (XCode 4.3.2) 的 View 之间切换