問題タブ [nsurlprotocol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
854 参照

swift - NSURLProtocol SWIFT エラー

NSURLProtocolで始まる URL をフェッチする をアプリに実装しようとしています。myApp://...

新しい SWIFT ファイルでプロトコルを作成し、次のファイルに実装しましたAppDelegate

しかし、私はこのエラーが発生し続けます。canInitWithRequest を webViews に定義する方法がわかりません。

2014-08-03 21:10:27.632 SubViewTest[6628:156910] * WebKit は、webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate: * -canInitWithRequest: 抽象クラスに対してのみ定義された、キャッチされていない例外を破棄しました。-[_TtC11SubViewTest13myURLProtocol canInitWithRequest:] を定義してください!

0 投票する
0 に答える
498 参照

nsurlprotocol - IOS ライブ ストリーミング

問題: ビデオ ストリーミングを有効にするために、メディア サーバーから mp4 ビデオをダウンロードし、同時に localhost httpserver (GCDWebServer) にフィードする必要があります。

これまでに試したこと: メディア サーバーからビデオ ファイルをダウンロードし、ビデオをストリーミングするためのローカルホストの URL を提供できます。

しかし、これはダウンロードに時間がかかります。そのため、ビデオをオンザフライでセグメント化し、次のセグメントの準備ができたときに m3u8 ファイルを更新し続ける方法があるかどうかを知りたいと思いました。

わかりました、なぜダウンロードするのですか?基本的に、カスタムの暗号化されたビデオ ファイルを処理する必要があります。したがって、ストリームをダウンロードして復号化し、ローカルの httpserver にフィードする必要があります。

要件が明確であることを願っています。

0 投票する
1 に答える
373 参照

ios - NSURLProtocolを通過するときにHTTP 404を構成するiOS NSURLCache

この質問に真剣に答えたい場合は、私が作成したミニアプリのクローンを作成し、答えについて推測する前に、同じように動作しないかどうかを確認してください。ありがとうございます:)

https://github.com/pavel-zdenek/nsurlprotocol-testbed

非常に単純なブラウザ:UIWebViewすべてのリクエストが最小限のNSURLProtocol再実装を通過します。ロード時間が経過します。スイッチは、実行時にプロトコル ハンドラを登録解除/登録します。ここで、特定のサイトhttp://www.rollingstone.comをロードします。他の多くのリソースに加えて、ページは GET します

http://sjc.ads.nexage.com/js/admax/admax_api.js

XHRリクエストを生成します

http://sjc.mediation.nexage.net/admax/adMaxApi.do?dcn=<somehash>

PZProtocolHandler OFF : XHR は即座にロードされます。回線 (サメ) で HTTP 200 として観測され、Safari Web Inspector で正常にロードされたと反映されます。それ以上の負荷では、ネットワーク上にはありませんが、Web インスペクターではまだ HTTP 200 です。つまり、キャッシュされます。

PZProtocolHandler ON : Web インスペクターは 3 回の試行を報告し、それぞれ 10 秒後にタイムアウトになり、HTTP 404 になります。それ以上リロードしても変化はありません。ここで興味深いのは、wire(shark) によると、リクエストは送信され、適切な HTTP 200 で応答されます。"Someone" は に向かう途中で 404 を構成していUIWebViewます。

さて、巧妙なブログを読む前であっても、サーバーの応答にCache-Controlヘッダーが含まれていない場合、iOS の URL キャッシュが熱核になることがわかりました。そして、この特定の GET リクエストはそのような場合です。しかし、それで 404 エラーが発生することはありません。また、さまざまな方法でデフォルトのキャッシュを休止状態にしようとしました。 でキャッシュ関連のデリゲート呼び出しを実装しNSURLProtocol、キャッシュ禁止フラグを使用して新しいリクエストを作成し、で予想されるトップナレッジを使用し、「ヌルキャッシュ」であると思われるものSDURLCacheに置き換えました。プロジェクト ソースのすべてを参照してください。NSURLCache

404は私にとって持続します。オーバーライドNSURLProtocolするという単なる事実が物事をそれほど壊すとは思えません。そのためのレーダーを埋める機会がなければ、私は生きることができませんでした、ありがとう。私はまだ何か間違ったことをしていることを願っています。

0 投票する
2 に答える
610 参照

ios - NSURLProtocol & swift - ios7 のエラー

次のチュートリアルで説明されているように、NSURLProtocol を実装しようとしました: http://www.raywenderlich.com/76735/using-nsurlprotocol-swift

iOS8 ではすべて正常に動作しますが、iOS7 では startLoading() で実行時エラーが発生します。

エラー: WebCore: CFNetwork Loader(10): EXC_BREAKPOINT

NSURLProtocol の実装に成功した人はいますか? ありがとうございました!

0 投票する
2 に答える
1697 参照

android - Android WebView からの *all* リクエストをインターセプトする

タイトルがすべてを物語っています。が何を求めているのか、すべて知りたいです。WebViewXHR POST について知らないなど、いくつかの奇妙な制限は受け入れられません。つまり、iOS のようなものがNSURLProtocol. それはアプリケーション全体のフックです。そのようなレベルの制御は必要ありません。WebViewインスタンス固有のフックで十分です。今、私はそのようなものはすぐに Android に存在しないことを知っています。shouldOverrideUrlLoadingとについては知ってshouldInterceptRequestいますが、ほとんど使用できません。URL 文字列だけでなく、リクエスト(メソッド、HTTP バージョン、ヘッダーなど)についても知る必要があります。さらに、傍受はぎこちなく同期しています。次の場合はどうなりますかshouldInterceptRequest別のサーバーに関連リソースを要求する必要があるため、呼び出しがブロックされていますか? ローカル リソースのキャッシュ専用に設計されているように見えます。

一方で、私は問題に何かを投げるつもりです。低レベルの内部にフックするある種のネイティブ ライブラリですか? 既存のプロジェクト ( pwnallmogoweb )の助けを借りて Chromium インターフェイスを拡張しますか? 既存の webkit クラスのプライベートに反映していますか? アプリケーション固有のプロキシ? 任意の洞察をいただければ幸いです。私は既存の SO の質問を 20 通読みました。それらはすべて、部分的なハック (JavaScript で XHR POST の不具合を回避するなど) を示唆するか、完全に応答しないことがよくあります。

0 投票する
2 に答える
2053 参照

ios - canInitWithRequest への YES 応答の後、NSURLProtocol はロードを要求されません

NSURLProtocol の実装を登録して、特定の URL 要求のカスタム処理を行います (これらの要求にプロパティを設定してタグを付けます)。これらの URL リクエストは、UIWebView の load メソッドから来ています。

  1. UI Web ビューを作成する (起動後の最初の読み込み)
  2. コンテンツを読み込む
  3. Web ビューを破棄する
  4. 新しい Web ビューを作成する (後続の読み込み)
  5. コンテンツを読み込む

ステップ 2 と 5 の間で動作が大きく異なります。私の NSURLProtocol 実装は、キャッシュされたデータを管理し、リクエストを処理するように設計されています。リクエストで自分のプロパティが検出されない場合は、特定の URL について 2 回目のチェックを行います (デバッグ用)。どちらの場合も次canInitWithRequestを返しYESます。

起動後の最初のロード:

他の人は、同じアセットに関するプロトコルへの呼び出しが複数あることを指摘していますが、これは問題ではありませんが、新しいオブジェクトで呼び出されるたびに、それが 4 番目 (4 つのうち) のオブジェクトであることに注意するのは興味深いことです。に渡されstartLoadingます。それでも、ここでは本当の懸念はありません。

後続のロード:

これは、私の見解では、予期しない動作です。プロパティが に渡される 3 回目までにリクエストから取り除かれているように見えますcanInitWithRequest。その後、応答YESしても、実際には開始されません。ページは単にUIWebView全体に戻され、その後のリクエストはありません。資産。作成時のリクエストは次のようになります。

私のプロトコルがリクエストを処理できると言ったとき、なぜそうする機会が与えられていないのでしょうか? 私の推測では、答えは UIWebView 自体の実装にあると思います。私のプロトコルをロードの責任エンティティにしたい場合、これを回避する方法について何か考えはありますか?

0 投票する
1 に答える
679 参照

ios - UIWebView に埋め込まれた MPMoviePlayerController でのビデオ ストリーミング

iOS の UIWebView に埋め込まれた MPMoviePlayerController でネットワーク ストリーミングがどのように行われるかを知りたいです。ソケットまたはその他のアプローチを使用して実行されますか?

まず、私の問題を理解してください。UIWebView で YouTube ビデオを再生しています。ビデオが読み込まれて再生が開始されると、MPMoviePlayerController (またはそのようなもの) が自動的にインスタンス化されます。ここで、すべての URL をプロキシ サーバー経由でプライベート メッセージと共に渡したいと考えています。私は次のアプローチを使用しています。

アプローチ 1

独自のカスタム NSURLProtocol クラスを作成し、すべてのリクエストをインターセプトしてからソケットを開き、プライベート メッセージを書き込んでから、GET/POST メッセージを書き込んで応答を webview に渡します。すべてうまくいっています。しかし、ビデオの再生が開始されたときに URL リクエストを取得できなかったため、URL を追跡するのが困難で、プロキシを通過しています。

MPMoviePlayerController が NSURLProtocol に準拠していないことを SO で読みました。そのため、ビデオ コントローラーを介したリクエスト フローをインターセプトできません。リンクは次のとおりです。

カスタム NSURLProtocol を使用して URL でムービーを再生するには?

アプローチ 2

connect()、write()、および read() メソッドをオーバーライドしてから、ログを出力して、ビデオ データが read() および write() メソッドを介して流れているかどうかを確認します。しかし、それでも私は望ましい結果を得ていません。私の他のすべてのネットワーク要求はこれらのオーバーライドされたメソッドを通過しますが、VideoData のみが表示されません。つまり、MPMoviePlayerController はソケットと読み取り、書き込みメソッドを使用していません。または、Webview が別のプロセスを内部で開始して、Player をインスタンス化します。

MPMoviePlayerController が新しいプロセスを内部的に作成していないことを確認するにはどうすればよいですか。

そして、これを達成する方法を知っている人がいたら、共有してください。どんな助けでも大歓迎です。私はこれに行き詰まっています。