Поэтому я пытаюсь вернуть значение из окна браузера после того, как оно было сгенерировано некоторым клиентским кодом.
Вот что у меня есть:
class WebBrowserViewController: KINWebBrowserViewController, NavigationProtocol, KINWebBrowserDelegate, WKScriptMessageHandler {
override func viewDidLoad() {
super.viewDidLoad()
let config = WKWebViewConfiguration()
let contentController = WKUserContentController();
contentController.add(
self,
name: "callbackHandler"
)
...
func userContentController(_ userContentController: WKUserContentController!, didReceive message: WKScriptMessage) {
print("Debug message got here")
if(message.name == "callbackHandler") {
print("JavaScript is sending a message \(message.body)")
}
}
Теперь я на 100% уверен, что это не весь код, который мне нужен.
Используя это как пример , мне кажется, что мне нужно как-то добавить эту конфигурацию в мой браузер:
self.webView = WKWebView(frame: webFrame, configuration: config)
Большая проблема здесь в том, что это для прямого WkWebView, и проект, с которым я работаю, использует KinWebBrowser. Вместо того, чтобы начинать с нуля с совершенно новой реализацией, кажется, есть способ расширить KinWebBrowser, но я еще не совсем знаком с синтаксисом Swift или Objective-C, и кажется, что KinWebBrowser написан на Objective-C.
Вот что я считаю подходящим определением интерфейса для KinWebBrowser:
@interface KINWebBrowserViewController : UIViewController <WKNavigationDelegate, WKUIDelegate, UIWebViewDelegate>
#pragma mark - Public Properties
@property (nonatomic, weak) id <KINWebBrowserDelegate> delegate;
// The main and only UIProgressView
@property (nonatomic, strong) UIProgressView *progressView;
// The web views
// Depending on the version of iOS, one of these will be set
@property (nonatomic, strong) WKWebView *wkWebView;
@property (nonatomic, strong) UIWebView *uiWebView;
- (id)initWithConfiguration:(WKWebViewConfiguration *)configuration NS_AVAILABLE_IOS(8_0);
#pragma mark - Static Initializers
/*
Initialize a basic KINWebBrowserViewController instance for push onto navigation stack
Ideal for use with UINavigationController pushViewController:animated: or initWithRootViewController:
Optionally specify KINWebBrowser options or WKWebConfiguration
*/
+ (KINWebBrowserViewController *)webBrowser;
+ (KINWebBrowserViewController *)webBrowserWithConfiguration:(WKWebViewConfiguration *)configuration NS_AVAILABLE_IOS(8_0);
Итак, как мне расширить KinWebBrowser таким образом, чтобы при вызове этого скрипта:
window.webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript");
Я получу все, что я передам в .postMessage
?
Моя конечная цель - получить строку или другие данные из Интернета в моем приложении iOS после того, как они будут сгенерированы в окне веб-браузера.