WebViewでエラーページを
    表示する話
   かねうちてつや @kaniza
     Cocoa勉強会関西
      2012/10/20
WebKit on iOS
UIWebView

UIWebViewDelegate
WebKit on OS X
WebKit on OS X
WebKit on OS X
ブラウザでエラーページ
エラーページの疑問
何もしないと何も起こらない

ページを表示したら、いまはどのページ?

エラーが起こったページは履歴に残る?

リロードしたら?
WebViewの構造
WebView

  WebFrame (mainFrame)

    WebFrame

      WebFrame

    WebFrame

    ....
WebFrame
いわゆるフレーム的なものに対応して存在

表示は WebFrameView という View

けっこう重要なクラス

Delegateあり
WebBackForwardList
WebView が保持する

戻る・進むの履歴を管理してくれる

基本的に外からは積めるだけ
サンプルアプリ紹介
オフラインエラーのとき
WebFrameLoadDelegate
- (void)webView:(WebView *)sender
    didFailProvisionalLoadWithError:(NSError *)error
    forFrame:(WebFrame *)frame
オフラインエラーのとき
WebFrameLoadDelegate
- (void)webView:(WebView *)sender
    didFailProvisionalLoadWithError:(NSError *)error
    forFrame:(WebFrame *)frame




      「このページロードできそうにないよ」
さてどうするか?
さてどうするか?

エラーページを読みこむ?

 表示URLとか履歴がおかしくなるとヤダ

 戻ったらエラーページとか出たらヤダ

 リロードできないとかヤダ
最初やったこと


エラーが起きたらエラーページを履歴に積まない
ように読み込みつつ

履歴にエラーが起きたURLを積んでおく
なんか履歴がおかしくなる
救世主登場
救世主登場

- (void)loadAlternateHTMLString:(NSString *)string
    baseURL:(NSURL *)URL
    forUnreachableURL:(NSURL *)unreachableURL
救世主登場

- (void)loadAlternateHTMLString:(NSString *)string
    baseURL:(NSURL *)URL
    forUnreachableURL:(NSURL *)unreachableURL

  Use this method to display page-level loading errors in a web view. Typically, a
  WebFrameLoadDelegate or WebPolicyDelegate object invokes this method from these
  methods: webView:didFailProvisionalLoadWithError:forFrame:
  (WebFrameLoadDelegate),
  webView:decidePolicyForMIMEType:request:frame:decisionListener:
  (WebPolicyDelegate), or webView:unableToImplementPolicyWithError:frame:
  (WebPolicyDelegate). If invoked from one of these methods, the back-forward list
  is maintained.
- (void)webView:(WebView *)sender
    didFailProvisionalLoadWithError:(NSError *)error
    forFrame:(WebFrame *)frame
実装しよう
めでたしめでたし
まとめ


WebKit on OS X はクラス・プロトコルがいっ
ぱい

探せば目的のものが用意されてる...かも

WebViewでエラーページを表示する話