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

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

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 так работает

2 ответа

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

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

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

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

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

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

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

window.foo.someFunctionName()

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

Вы можете попробовать использовать url parametersКак вы бы подключились к PHP с помощью swift

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

Затем, когда вы запускаете JavaScript, вы можете проверить, что в url parameters есть, а затем запустить функцию на основе этого

как этот URL-адрес example.com мы используем параметр commandсказать, какую функцию запустить

example.com?command=foo

тогда мы должны иметь что-то подобное в JavaScript

if(command='foo'){
   //run function
   runFoo();
}

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

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

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

Другие вопросы по тегам