JS вызывает функцию в Swift

Я знаю, как отправить сообщение из JS в собственное быстрое приложение IOS:

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

        println("JavaScript is sending a message \(message.body)")

}

и JS:

webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript");

Мой вопрос: возможно ли напрямую вызвать функцию в собственном приложении, а не получать сообщение в моем примере кода.

скажем, я хочу в JS использовать что-то вроде:

webkit.messageHandlers.someFunctionName()

Причина, по которой я спрашиваю, заключается в том, что в Android это работает так.


person Michael A    schedule 16.06.2015    source источник
comment
у вас есть URL-адрес, который вы используете правильно? вызвать js из приложения ios?   -  person    schedule 16.06.2015


Ответы (2)


WKWebView поддерживает только необработанный интерфейс передачи сообщений. Вы должны обернуть его для сложных взаимодействий между JS и нативом.

Я создал проект с именем XWebView, который предлагает API в стиле языковой привязки на основе передачи необработанных сообщений WKWebView. Он написан на Свифте.

Например, вы можете написать плагин на Swift:

class Plugin : NSObject {
    func someFunctionName() {
        doSomeThing()
    }
}

Откройте экземпляр плагина для JavaScript перед загрузкой HTML:

let webView = WKWebView(frame: frame, configuration: WKWebViewConfiguration())
webView.loadPlugin(Plugin(), namespace: "foo")

Вызов функции из JavaScript:

window.foo.someFunctionName()

Это действительно легко и просто. Для получения более подробной информации, пожалуйста, посетите страницу проекта.

person soflare    schedule 24.06.2015

Вы можете попробовать использовать переменные запроса URL, как если бы вы подключались к PHP с помощью Swift.

Вот пример того, как получить переменные запроса в Javascript: Получить параметр URL-адреса jquery или как получить значения строки запроса В JS

Затем, когда вы запускаете Javascript, вы можете проверить, что представляют собой переменные запроса URL, а затем запустить функцию на основе этого.

Например, мы используем переменную command ниже, чтобы указать, какую функцию запускать:

example.com?command=foo

затем сделайте что-то подобное в Javascript:

if(command == 'foo') {
   runFoo();
}

Затем вы также можете использовать переменные запроса URL для указания аргументов функции.

Если вы выберете PHP

Если вы решите использовать PHP, вы можете сделать то же самое с $_GET['command'];.

person Community    schedule 16.06.2015