32

UIWebview内で開いている特定のフィールドを持つHTMLフォームがあります。特定のボタンをクリックすると、アプリ内アクションを実行したいと考えています。

私が現在使用しているアプローチは、ボタンをクリックしてページをダミーの URL にリダイレクトすることです。デリゲート メソッド「shouldStartLoadWithRequest」を使用して URL をスニッフィングし、リダイレクトを停止します。次に、カスタム イベント (画像のキャプチャとアップロード) を実行し、続行します。これは醜いハックのようです。とにかく、ページのリダイレクトではなく、ボタンクリックイベントに直接フックできますか?

UPDATE ボタンのクリックでJS関数が呼び出されたときにデリゲートメソッドを起動するように設定する方法はないようです。これを行う唯一の方法は、前述の URL スニッフィング方法を使用することです。これは、以下の joern によって詳細に説明されているので、彼の回答を受け入れます。

4

3 に答える 3

64

次のことができます。

あなたのHTMLで

<a class="yourButton" href="inapp://capture">Button Text</a>

あなたのUIWebViewDelegateで

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
   if ([request.URL.scheme isEqualToString:@"inapp"]) {
      if ([request.URL.host isEqualToString:@"capture"]) {
         // do capture action
      }  
      return NO;
   }  
   return YES;
}

ボタンの URL に「キャプチャ」を追加して、さまざまなアクションをトリガーする複数のボタンを区別できるようにしました (必要な場合)。

于 2012-06-12T11:42:10.517 に答える