私はUIWebViewに基づいたiPadアプリで作業しています。できるだけ簡単に説明するために、1つの大きなインタラクティブなWebviewが表示され、カスタムジェスチャーもサポートされています。UIWebViewで未使用のタップイベントを傍受する
タップがまだwebviewで消費されていない場合(つまり、スクロール/ズーム操作の開始ではない、リンク上のタップではない場合のみ)、WebViewでシングルタップを表すイベントを捕捉する必要があります。 、彼らはいくつかのJavaScriptを引き起こすタップではありません)。
UIWebViewは、イベントで非常に欲張りです。私の経験上、UIWebViewは消費されていなくても、伝播しない傾向があります。イベントをキャッチするために、メインUIWindowのサブクラス化が終了しました(http://mithin.in/2009/08/26/detecting-taps-and-events-on-uiwebview-the-right-way/参照)。これはうまくいっていますが、問題は私がタップがWebビューでいくつかのJavaScriptを起動したかどうかを認識できないことです。
追加の制限として、UIWebViewまたは表示されるHTMLで実行されるjavascriptを制御できません。
このように、問題は次のようになります。UIWebView自体、特にjavascriptアクションで他のアクションを引き起こさなかったタップイベントのみを検出する方法は何でしょうか?
〜
あなたは好奇心旺盛であるべき、私が働いているプロジェクトのソースコードはGitHubの上にある:ちょうどベーカーフレームワークにあなたを指すようにGoogleに依頼し、それを見つけるために。
+1むしろ偽のホストを使用するよりも、私は通常、カスタムスキームを使用することをお勧めします。したがって、 'http:// clickhandler'の代わりに、' handler: 'をお勧めし、' request.URL.scheme'を使ってそれをチェックします。これにより、 'handle:click'のようなデータを簡単に渡すことができ、偽のホストよりも明示的です。 –
私はもともとそれも考えましたが、それは良い考えではありません。サポートされているスキームをinfo.plistに追加しない限り、カスタムスキームは機能しません。誰でもそのスキームをSafariに入力すると、アプリを起動します。これは内部的なものあなたのアプリのためのプロトコル。トップレベルドメインを持たない(末尾に.comがない)偽のホストでhttp://を使用すると、実際のドメインと衝突する可能性がないため安全です。 –
私はこれを常にしています。 Webviewデリゲートでキャプチャするためにカスタムスキームを登録する必要はありません。あなたが他のアプリからあなたに転送されるようにするには、それを登録する必要があります。 –