そのような質問がたくさんあることは知っていますが、私の質問は他の質問とは少し違うようです. 私が本当にやりたいことは、 javascript から目的の C メソッドを呼び出すことだけです。多くの回答やチュートリアルで提案されているように、パラメーターを前後に送信する必要なく、これを行う方法があると確信しています。これの目的は、phonegap アプリのユーザーが HTML ボタンをクリックしてステータス バーを非表示にできるようにすることです。これを実現するには、目的の C メソッドを実行するようにアプリに指示する方法を見つける必要があります。HideStatusBar
-(void) HideStatusBar {
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
}
パラメータを送信したくありません。私に説明してほしいのは、obj c に javascript からメソッド呼び出しを行うように指示する方法だけです。解決策の 1 つは、パラメーターを webviews アドレス フィールドに設定し、 obj C 経由で取得することですが、私の場合はもっと簡単な解決策があると確信しています。
phonegap プラグインを作成しようとすることから始めましたが、「反対側」への「メッセージ アクロス」を取得できなかったため、目的 C でのメソッド呼び出しが何らかの理由で発生しませんでした。必要に応じてここにコードを投稿できますが、もっと簡単な解決策が必要だと思いました。
javascript 内から obj c メソッドを呼び出す最も簡単な方法を誰かに説明してもらえますか?
編集
私はこれを機能させましたがshouldStartLoadWithRequest
、webview が最初にロードされたときにのみ呼び出されます (タイトルに示されているように)。これは、URL を更新すると、メソッドが呼び出されないことを意味します。これは私が今それを行う方法です:
Javascript
('#hideStatusBar').live('click',function(event) {
window.history.pushState('page2', 'Title', '/doc.html://hideStatusBar');
});
オブジェクティブ C
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType {
//NSString *currentURL = request.URL.absoluteString;
if([request.URL.absoluteString isEqualToString:@"http://domain.com/doc.html://hideStatusBar"]){
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
return NO;
}
return YES;
}
前述のように、javascript を介して HTML ドキュメントの URL を更新するたびに、このメソッドを実行したいと考えています。さらにアイデアはありますか?