如何将数据从Swift传递到JavaScript?

3
我知道如何将数据从JavaScript传递到Swift,但不知道如何将数据从Swift传递到JavaScript。
我用于从JavaScript传递数据到Swift的方法如下:

<head>

    <title>Test</title>
    <meta charset="UTF-8">
</head>
<body>
    <h1>WebView Test 3</h1>
    <script>
        function callNativeApp () {
            try {
                webkit.messageHandlers.callbackHandler.postMessage("Here");
            } catch(err) {
                console.log('The native context does not exist yet');
            }
        }
    callNativeApp();
        </script>
</body>

import UIKit

import WebKit

class ThirdViewController: UIViewController,WKScriptMessageHandler{


    override func viewDidLoad() {

        super.viewDidLoad()

        let configuration=WKWebViewConfiguration()

        let controller=WKUserContentController()


        controller.addScriptMessageHandler(self, name: "callbackHandler")


        configuration.userContentController=controller

        let webView=WKWebView(frame: self.view.frame, configuration: configuration)

        let url=NSBundle.mainBundle().URLForResource("test3", withExtension: "html")

        let request=NSURLRequest(URL: url!)

        self.view=webView

        webView.loadRequest(request)
    }

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

        if(message.name == "callbackHandler"){
            print("callbackHandler: \(message.body)")
        }



    }


}
2个回答

5

正如您所知,通过调用 postMessage 将信息传递给 Swift。

要将信息从 Swift 传递到浏览器,只需调用 evaluateJavascript,如下所示:

let num1 = 4
let num2 = 8

webView.evaluateJavaScript("addTwoNumbers(\(num1), \(num2);")  { (result, error) in
                guard error == nil else {
                    print("there was an error")
                    return
                }

                print(Int(result))
            }

为了使这段代码起作用,您需要在Javascript中编写一个名为addTwoNumbers的函数来处理它并完成某些操作。

你是否遇到过将JSON字符串作为参数传递时出现问题?当JSON字符串作为参数传递时,evaluteJavaScript会出现问题。如果您有时间,请访问此链接并分享您的想法:http://stackoverflow.com/questions/40292348/ios-evaluatejavascript-invokes-function-when-normal-string-passed-as-parameter - Crashalot
这段代码可能会出现错误,类似于“发生了 JavaScript 异常” UserInfo={WKJavaScriptExceptionLineNumber=1, WKJavaScriptExceptionMessage=SyntaxError: Unexpected token ';'. Expected ')' to end an argument list.,}。应该改为: webView.evaluateJavaScript("addTwoNumbers((num1), (num2))") - Ruchira More
这在我测试时是有效的。为什么每个参数都需要括号,而JavaScript使用分号来结束它的行,所以不确定为什么会出现错误。 - Scriptable

0
作为例子,我将采取像这样的JS函数:-
      function send_message(val01, val02) {
           // you JS CODE
      }

然后要运行该函数,您应该调用:

 self.webView.stringByEvaluatingJavaScriptFromString("send_message(\"\(self.value1)\", \"\(self.value2)\")")!

1
你有没有遇到将JSON字符串作为参数传递时出现问题?当将JSON字符串作为参数传递时,evaluteJavaScript会出错。如果你有时间的话,希望能听听你的想法:http://stackoverflow.com/questions/40292348/ios-evaluatejavascript-invokes-function-when-normal-string-passed-as-parameter - Crashalot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接