2017-02-05 13 views
0

私のアプリケーションにはUIWebViewsがあります。サイトのデスクトップバージョンが必要なローディングサイト、モバイル版のモバイルサイトが必要なローディングサイトです。複数のUIWebViewsに異なるユーザーエージェントを設定する

私はこれを達成するためにデスクトップエージェントまたはモバイルユーザーエージェントにユーザーエージェントを設定しました。例えば

私はのUIWebViewは、サイトのデスクトップ版をロードしたい場合、私は単に右の前にこのコードを実行します:問題はもちろん、これはどんなのUIWebViewのために意味、NSUserDefaults変数を設定していることである

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36", @"UserAgent", nil]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; 

私のアプリでは、この後に読み込まれ、デスクトップユーザーエージェントが使用されます。デスクトップとモバイルの間で必要に応じてNSUserAgentをフリップフロップしてそれに応じて読み込むことができますが、時には自分のアプリケーションで2つのUIWebViewsを同時にロードする必要があります。

上記のUIWebViewに固有のUIWebViewのユーザーエージェントを設定する方法はありますか?

これは、NSUrlRequestメソッドまたは何かを驚かせることを含むと仮定していますか?私はそのことについてほとんど知りません。

答えて

1

UIWebViewではなくWKWebViewを使用するのが簡単です。 WKWebViewは、ユーザーエージェント文字列をクラス自体のプロパティとして公開します(.customUserAgent、iOS9 +)。追加のボーナスとして、JavaScriptをネイティブコードにプリコンパイルすることができるため、ビューで実行されているJavaScriptコードが高速になり、バッテリー消費量が少なくなります。

何らかの理由でUIWebViewに固執する必要がある場合は、NSURLProtocolを作成して、すべてのアプリケーションのHTTP要求をインターセプトし、URLのホスト名に応じてフィールドを変更することができます。 AppleのウェブサイトにNSURLProtocolの例がいくつかあります。それから始めて、必要に応じて微調整してください。

+0

WKWebViewについて知らなかった –

+0

編集をありがとう。彼らはiOS 9まで追加していないことを忘れていた。 – dgatwood

+0

心配しない!これは私の現在のプロジェクトに一トンを助け、今夜WKWebViewに切り替える! –

関連する問題