Пользовательские сценарии - это JS, которые вы вставляете на свою веб-страницу либо в начале загрузки документа, либо после завершения загрузки документа.Пользовательские сценарии являются чрезвычайно мощными, поскольку они позволяют настраивать веб-страницу на стороне клиента, позволяют внедрять прослушиватели событий и могут даже использоваться для внедрения сценариев, которые, в свою очередь, могут вызывать обратный вызов в приложении Native.Следующий фрагмент кода создает пользовательский сценарий, который внедряется в конце загрузки документа.Пользовательский сценарий добавляется к экземпляру WKUserContentController, который является свойством объекта WKWebViewConfiguration.
// Create WKWebViewConfiguration instance
var webCfg:WKWebViewConfiguration= WKWebViewConfiguration()
// Setup WKUserContentController instance for injecting user script
var userController:WKUserContentController= WKUserContentController()
// Get script that's to be injected into the document
let js:String= buttonClickEventTriggeredScriptToAddToDocument()
// Specify when and where and what user script needs to be injected into the web document
var userScript:WKUserScript = WKUserScript(source: js,
injectionTime: WKUserScriptInjectionTime.AtDocumentEnd
forMainFrameOnly: false)
// Add the user script to the WKUserContentController instance
userController.addUserScript(userScript)
// Configure the WKWebViewConfiguration instance with the WKUserContentController
webCfg.userContentController= userController;
Ваша веб-страница может публиковать сообщения в собственном приложении с помощью метода window.webkit.messageHandlers.<name>.postMessage (<message body>)
.Здесь «имя» - это имя отправляемого сообщения.JS может отправить обратно любой объект JS в качестве тела сообщения, и объект JS будет автоматически сопоставлен с соответствующим собственным объектом Swift.Следующий фрагмент кода JS отправляет обратно сообщение, когда происходит событие нажатия кнопки на кнопке с идентификатором «ClickMeButton».
varbutton = document.getElementById("clickMeButton");
button.addEventListener("click", function() {
varmessageToPost = {'ButtonId':'clickMeButton'};
window.webkit.messageHandlers.buttonClicked.postMessage(messageToPost);
},false);
Чтобы получать сообщения, отправленные вашей веб-страницей, ваше собственное приложение должно реализоватьпротокол WKScriptMessageHandler.Протокол определяет один обязательный метод.Экземпляр WKScriptMessage, возвращаемый в обратном вызове, может быть запрошен для получения подробной информации о отправляемом сообщении.
func userContentController(userContentController: WKUserContentController,
didReceiveScriptMessage message: WKScriptMessage) {
if let messageBody:NSDictionary= message.body as? NSDictionary{
// Do stuff with messageBody
}
}
Наконец, собственный класс, который реализует протокол WKScriptMessageHandler, должен зарегистрироваться в качестве обработчика сообщений с WKWebView следующим образом:
// Add a script message handler for receiving "buttonClicked" event notifications posted
// from the JS document
userController.addScriptMessageHandler(self, name: "buttonClicked")