Предположим, что я реализовал веб-браузер iOS, способный к двунаправленной связи с Javascript в веб-просмотре. Что мне нужно сделать, если я хочу, чтобы любые расширения действий iOS8 работали в нем, как в Mobile Safari? Нет никакой проблемы в том, чтобы указать веб-просмотру выполнять функции над обязательным объектом ExtensionPreprocessingJS
и получить результат обратного вызова. Но как мне вообще получить этот NSExtensionJavaScriptPreprocessingFile
? Я не нашел ни одного API iOS8, который позволил бы мне перечислить подходящие расширения приложений. Тем меньше они получают свои Info.plist
и фактически получают файл из содержимого пакета расширения приложения.
Благодаря моему тестовому расширению Action я знаю, что все extensionContext.inputItems
, когда-либо переданные расширению, являются только и только тем, что документ расширения Apple Action говорит: один NSItemProvider
под NSExtensionItemAttachmentsKey
, предоставляя один kUTTypePropertyList
с тем, что уже было возвращено выполнением JS . Другими словами, JS должен быть известен и выполнен еще до вызова beginRequestWithExtensionContext
.
Я что-то упустил или сторонние приложения действительно не могут делать то же самое, что и Mobile Safari? Это имело бы смысл с точки зрения безопасности доступа к приложениям, но тем не менее… ключевые слова здесь — «модульность» и «расширяемость», верно? Является ли Mobile Safari более равным животным, чем животные ванильного пользовательского интерфейса / WKWebView? Я имею в виду, что WKWebView
действительно имеет некоторые новые удобные функции JS (evaluate
обработчик завершения, WKUserContentController
), но как я могу связать его с общим расширением Action?