1

自己定義プロトコルの urlHandling の実装に成功しました。

他のアプリがセキュリティ上の問題でこの URL を呼び出そうとしたときに、アプリが起動しないようにする必要があります。プロトコルは、実行された JavaScript コードからのコールバックにのみ必要であるため、アプリ内の呼び出しのみが許可されます。

UIWebView:stringByEvaluatingJavascriptFromStringJS コードは複数のプラットフォームで動作する必要があるため、 の応答を使用することはできません。

アプリ内で呼び出し自体を傍受することを考えました (これは を使用して機能しUIWebViewDelegate:shouldStartLoadWithRequestます) が、WP8 でそれが可能かどうかわかりませんでした。(Android では、これは で動作しWebViewClient:shouldOverideUrlLoadingます)

4

3 に答える 3

0

ついに私は自分に合った解決策を見つけました。;)しかし、それは別のアプローチです。

まず、 WebViewJavascriptBridgeを確認することをお勧めします。これは、コールバックを実装し、必要になる可能性のあるすべてのことを双方向で通信するためのブリッジです。しかし、それはiframeで機能しています...私はajaxを使いたかったのです。

アプリがリッスンするプロトコルを実装していません。私が今していることは、NSURLProtocolNOを実装することです。これは、常に。に戻りcanInitWithRequestます。/!anythingUniqueJS-Callを識別するために(のような)一意のパスを使用しています。この設定で、ajaxを呼び出して、Obj-Cコードで何かを行うことができます。

  1. NSURLProtocolを実装します。
  2. を介してNSURLProtocolを登録し[NSURLProtocol registerClass:[SFJURLProtocol class]];ます。
  3. baseURLを設定する必要があります...任意のページをロードするか、またはを介して設定しwebView:loadHTMLSStringます。コントローラを初期化するときにそれを行います。
  4. JavaScriptからのリクエストを起動します
  5. あなたの関数でそれらをキャッチしますcanInitWithRequest。クリーンなコードのためにコントローラーで何かをしたいと思うかもしれないので、コールバックメカニズムか何かを考えてください。;)
  6. ???
  7. 利益!

これがお役に立てば幸いです。

于 2013-03-21T18:44:58.980 に答える
0

UIApplicationDelegateプロトコルメソッドを実装するのはどうですか?

application:openURL:sourceApplication:annotation:

とチェックsourceApplication

于 2013-02-22T12:09:40.323 に答える
0

私の知る限り、iOS には、アプリがカスタム URL スキームを呼び出してこの方法でアプリを開くことを許可する「ホワイトリスト」のようなものを持つ標準 API はありません。この URL スキームを使用すると、ケーキの一部ではなく、ケーキ全体しか取得できません。

提案A:アプリまたは別のアプリから開始された
場合は、アプリのデリゲートにブール変数を設定して保存できます.View Controllerで、この変数が設定されているかどうかを確認し、アプリのを空白の画面または情報画面と交換しますアプリが信頼できるソースなどから開かれていないことをユーザーに伝えます。openURLNOrootViewControllerwindow

提案 B:
本当にアプリを開きたくない場合は、application:openURL:sourceApplication:annotation:.

sourceApplicationが信頼できるソースであるかどうかを確認し、そうでない場合はNSAssert(YES == NO, @"Bad bad boy")クラッシュさせるようなものを使用してください。

Bは単なるハックであり、ベストプラクティスとは考えていません。提案Aを試してみてください。これははるかにユーザーフレンドリーな方法であり、目標を達成できるはずです.

于 2013-02-22T13:08:12.067 に答える