私のiOSアプリケーションでは、私たちのすべてのJavaScriptを再利用できるように私たちのWebアプリケーションで2つのタブ/ウィンドウの親子関係をシミュレートする2つのWKWebView
コントロールがあります。問題は、これらの間に汎用通信チャネルがないことです。WKWebView
ソースからのjavascripts関数へのアクセス
Webアーキテクチャ:
- 最初/マスターウィンドウは、第二/子ウィンドウで開くリンクを社内のjavascript機能をロードします。
- 2番目または3番目のウィンドウには、サードパーティのWebコンテンツが読み込まれます。
- サードパーティのコンテンツは、javacriptフォームソースウィンドウ(window.opener/window.parent APIブリッジを使用)を使用してGoogleシステムと通信します。
-
は今、 ネイティブアプリで、これは私が既存のJavaScriptを再利用し、ウェブarchtectureをシミュレートするためにやっているものです。window.open("http://localhost/child.html", "myWindow", "width=200,height=100");
B - 第一WKWebViewでWebページからjsの呼び出しの下に。
- (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
// Here, window.open js calls are handled by loading the request in another/new web view
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
WebViewController *webViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"WebViewController"];
webViewController.loadURLString = navigationAction.request.URL.absoluteString;
// Show controller without interfering the current flow of API call, thus dispatch after a fraction of second
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.navigationController pushViewController:webViewController animated:YES];
});
return nil;
}
C - WKUIDelegateインターセプトこの呼び出しは、(a)および2 WKWebViewにを開きます。 Web /コンピュータブラウザでは、Webアプリケーションの子ウィンドウは、window.opener
とwindow.parent
を使用して、ソースjs関数にアクセスできますWKWebView
で同じ機能を実現するにはどうすればよいですか?つまり、2番目のWKWebView
のjs関数は、親/ソースWKWebView
からjs関数を呼び出すことができますか?
これは有望な答えのようです。興奮した。今日はそれを撃つだろう。 – Ashok