A view that embeds web content in your app.
A view that embeds web content in your app.
こんにちは。 Sleipnir Mobile for iPhone / iPad 開発担当の宮本です。 調べてみると、Sleipnir Mobile の最初のコミットは 2010年9月6日で、もう3年近く開発しているようです。最初はこんな貧弱な API でブラウザなんて作れるわけ無いと思っていましたが、なんとかなるものですね。今では多くのユーザーさんに使っていただけるプロダクトになりました。 今回は、この3年間で、使ってきた UIWebView の技を紹介したいと思います。詳細な方法については書きませんが、UIWebView で何ができて何ができないのかはわかるかと思います。それぞれの詳細なやり方については機会があれば書いていきたいです。 目次 長くなりそうなので、目次を用意しました。 余裕があればアップデートするので、ブックマークでもしておいてください。 UIWebView の API
UIWebViewで読み込んだウェブページをキャッシュ(Cache)で保存して、オフラインで閲覧するための実装です。 今回は、あとで読む機能を搭載する「Pocket」などのアプリように、テキストデータのみを抽出して保存するのではなく、テキスト・画像・サイドバーなどのすべてのページの状態を記録する手法をとります。つまり、見たページをそのまんま保存するということです。 こちらがサンプルコードです。 ページキャッシュの実装方法は基本的に、こちらの記事「Drop-in offline caching for UIWebView (and NSURLProtocol)」を参考にしています。 ちなみに、プログレスバーの実装はこちらの記事「UIWebViewにプログレスバーを出すためのモジュールを作りました」を参考にしました。 (1) 必要なファイル・プレームワーク Reachability.h Rea
ググると「メモリ上にしか保存されない」という古い情報がよくヒットするのでメモしときます。 ソース 参考:NSURLCache Uses a Disk-cache as of iOS5 NSURLCache というのは、UIWebViewで使用しているキャッシュオブジェクトの事です。 参考(情報がちょいと古い):Cocoaの日々: [iOS] UIWebView のキャッシュ調査 利用するとアプリ容量がどんどん肥大化してく問題が起きたので、iPhoneアプリの中身がどうなっていくか調べている過程で上の記事を見つけました。 ほんとにディスク上に保存される? 実際試してみたところ、確かにUIWebViewを使用する度に、アプリの容量は増えます。 アプリを完全終了しても容量は減らないので、ディスクキャッシュしているのは間違いなさそうです。 具体的にどのファイルにキャッシュが保存されているかというと
iOS7を試したくて借りたiPhone端末を危うく文鎮化しそうになったしょうたんです、こんばんは。 何とか文鎮はまぬがれましたが、この件はとても思い出深いのでまた別の機会に投稿したいと思います^^; えー今回はiOSのUIWebViewで通信エラー制御です。 まず、didFailLoadWithErrorにエラーコードによる制御を入れます。 エラーコード-999 (定数では NSURLErrorCancelled) は先行するリクエストが キャンセルされたエラーで、後追いのリクエストが問題なく捌いてくれている状況でも頻発します。 その為、-999はエラー処理から除外します。 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { if ([error code] != NSURLErrorCa
下記2つのHTTP通信での、それぞれのエラー時のハンドリングについてmemoしておきます。 ・NSURLConnectionでNSData型を取得する場合 ・UIWebViewのloadRequestでリクエスト送ってweb画面を表示する場合 どちらの場合も、エラーが起きたらアラートビューを出して別画面へ戻すようにしました。 ・NSURLConnectionでNSData型を取得する場合 - (void)viewDidLoad { [super viewDidLoad]; [self configureView]; } - (void)configureView { NSString *url = @"http://192.168.1.1:8080/app/select_question_id"; /* POST */ NSString *keyValue = [NSString stri
#import <Foundation/Foundation.h> @interface MyURLProtocol : NSURLProtocol @end #import "MyURLProtocol.h" # ループを防ぐためにHTTPリクエストヘッダーに追加する static NSString *const MyWebViewResponseCheckHeader = @"X-iOS-WebView-Response-Check"; @interface MyURLProtocol () @property (strong, nonatomic, readwrite) NSURLRequest *request; @end @implementation MyURLProtocol /*! クラスロード時に、URL Loading Systemに登録してしまう UIWebView/
LinkedIn for iPad: 5 techniques for smooth infinite scrolling in HTML5 This is the second article in a series of blog posts that we will write about LinkedIn's new iPad App. In the first post, we described how we build a snappy mobile experience using HTML5 local storage. In this article, I am going to talk about the challenges we faced building an infinitely swipe-able list. What's a "Stream"? Wh
こんにちは、WebViewベースのアプリ開発中の@yoheiMuneです。 今日は、WebViewベースのアプリ開発で困る問題の一つ、JSやCSSがキャッシュされて変更内容が更新されないという問題に対応したいと思いブログを書きました。 WebViewベースのアプリ作成時の課題 WebViewベースのアプリを作成している時に色々な課題にぶち当たります。 その中の一つに、WebViewがJSやCSSをキャッシュしてしまい、 コードを書き換えても反映されないという問題があり、最近はその問題に悩まされてます。 そこでWebViewがキャッシュしないようには出来ないものかと調べました。 その調査結果を纏めたのが、今回のブログ記事となります。一部情報は未検証な部分があります(これから検証します)。 そのため、不備などありましたらご指摘頂けると幸いです。 「キャッシュを禁止する」とはアプリの速度が落ちる
ここでは例としてこちらのWebページをUIWebViewで読み込み、そのリンクをクリックした時の動作を置き換えます。 UIWebViewでリンクをクリックした場合には以下のdelegateが呼ばれます。 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationTypeここで navigationType の値をチェックすると何のイベントで呼ばれたかが確認できます。 ここにはサブミット(フォーム入力時のsumbitボタンが押されたとき)のときには UIWebViewNavigationTypeFormSubmitted 、リロードされた時には UIWebViewNavigat
前提知識 iPhoneアプリ内にWeb(HTML)を表示するには、UIWebViewを使います。そして、UIWebViewの中のJavaScriptから、Objective-Cにデータを渡す場合は、location.hrefの値を変更します。UIWebView発生した画面遷移イベントをどうするかは、UIWebViewのdelegate先が判定します。data://で始まるなどといったルールを満たしているURLにアクセスした場合にそれをトラッピングすることで、JavaScriptからのメッセージをobjective-cに渡します。 JavaScript function sendDataToObjc(data){ location.href=”data://” + data; } - (id)init { self = [super init]; if (self) { self.deleg
Copyright (C) iPhoneアプリ開発備忘録 All rights reserved. ブログ内で記したコード、内容の正確性は保証いたしません。 記載内容を実装したことにより発生した不具合・損害等の責任は一切負いません。 UIWebViewは、他のViewと使い方がちょっと違う。 普通にViewを終了するときに、UIWebViewをreleaceするだけではアプリが落ちることがある。(特にメモリ量が少ないiPhone3Gの場合) これに対処するコード。 deallocメソッドなどでUIWebViewをreleaceする前に、webView.delegate = nil;を追加する。 hogeController.h@interface hogeController : UIViewController { IBOutlet UIWebView *webView; } @prop
UIWebViewのスクロールが遅くてイラつきます。 実はこれUIWebViewが重いのではなくて、そういう設定になっているだけです。 デフォルトでは UIWebView 内の UIScrollView の decelerationRate が UIScrollViewDecelerationRateFast に設定されています。 それを UIScrollViewDecelerationRateNormal に変更すれば良いです。 幸いiOS5からはUIWebView 内のUIScrollViewがプロパティとして追加されたため 以下のようにするだけでスクロールの滑りがUITableViewのデフォルトと同等になります。 self.webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal; iOS4でも
追記2012/5/26 AdBannerViewでクラッシュする例も追加しました。TweetOverview のクラッシュ対策について | Zero4Racer PRO Developer’s Blog 追記2012/5/14 これでほぼクラッシュしない様になって来ているのですが、まだ、クラッシュすることがあります。最小構成を作成してみたところ、その構成では落ちないようです。メモリが少ない場合など、条件が重なって発生するようです。引き続き調査を続けます。 追記 2012/05/21: 落ちなくなったコードを共有します。 UIWebView がクラッシュするのを防ぐ方法−2 | Zero4Racer PRO Developer’s Blog iOS5 で UIWebView を使用しているときはご注意-予期せぬクラッシュを防ぐ方法 | Zero4Racer PRO Developer’s B
For an IPhone app I have been building, I decided to use the UIWebView to render SVG files, instead of doing the vector rendering myself. I needed to have a way to read-in files generated from a vector authoring tool (Illustrator etc.) and after initially looking for an open-source SVG parsing/rendering engine of some sort, I decided on hosting the UIWebView itself instead and use the SVG renderin
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く