WKWebViewについてわかったこと。iOS 8.1.0の時点での情報です。 StackOverflowやDeveloperForumsからの情報と、私がOhajiki Web Browserを開発する過程で得た知識を短めにまとめてみました。 これ以外にもまだまだ細かい部分があるかと思いますが、より良い方法や補足などがありましたらコメント欄で是非とも教えていただければ幸いです。 iOS 9での変更点はこちら: iOS 9 WKWebView 主な変更点をざっくり tmpフォルダ以外は file:/// を使ってアクセスできない iOS8.0.2からtmpディレクトリ以下のファイルに fileプロトコルでアクセスすることが可能になりましたが、それ以外のディレクトリからのアクセスは無効となっています。WKWebViewが普及しない一番の要因はこれではないでしょうか。 こちらで試すことが出来ま
こんにちは。開発担当の福井です。 突然ですが、みなさん NSProxy をご存じでしょうか? NSProxy は Foundation の中で唯一 NSObject を継承しないクラスです(NSProxy のサブクラスを除く)。 また、その実装はほとんどありません。 今回はその NSProxy を使って view に対するメソッド呼び出しをフックしてみようというお話です。 NSProxy の使い方 名前からも推測できるように、NSProxy は Proxy パターンを実現するためのクラスです。 メッセージの呼び出しが動的に解決される Objective-C において Proxy オブジェクトを実現するのは実に簡単です。 NSProxy は、ただ自身に送られたメッセージを、そのまま別のオブジェクトに受け流すことで Proxy としての機能を実現します。 Proxy オブジェクトを作ってみる
こんにちは! Sleipnir Mobile for iPhone / iPad 開発担当の宮本です。 ちょっと前ですが、UIWebView についての記事を書きました。 【iOS】UIWebView Hacks 〜ブラウザ開発テクニック ページ内検索についての内容が抜けていたので、今回はその話です。 UIWebView にはページ内検索関連の API はありません。Objective-C で DOM をたどることもできないので、ほとんどを JavaScript を使って実装します。 実装するポイント ソースコードは一番最後にあります。まあまあ長いコードなので、ポイントとなる部分だけ紹介します。 全てのエレメントをたどる body から childNodes をたどっていっても、iframe 内の document にはアクセスできません。window.frames で frame 一覧が
iOS 5.1 では、サードパーティアプリの内蔵ブラウザで localStorage が使えないという問題が発生する場合があります。これは iOS 5.1 のバグのようです。Web SQL Database でも同じ問題が起きるようです。 (localStorage とは、ウェブブラウザが内部的に持っている機能で、ウェブページ内の JavaScript から任意のデータを読み書きすることができる入れ物です。Cookie と似ています。例えばユーザーがフォームに入力した情報を JavaScript が裏で localStorage に保持し、ユーザーが次に同じページにアクセスした時に自動的に再入力させるようなことに使われます。) 実際、手持ちのいくつかのアプリで、localStorage が正しく使えないことを確認しています。しかしその問題の発生条件がちょっとややこしそうなのです。 色々ググ
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
UIWebViewのスクロールが遅くてイラつきます。 実はこれUIWebViewが重いのではなくて、そういう設定になっているだけです。 デフォルトでは UIWebView 内の UIScrollView の decelerationRate が UIScrollViewDecelerationRateFast に設定されています。 それを UIScrollViewDecelerationRateNormal に変更すれば良いです。 幸いiOS5からはUIWebView 内のUIScrollViewがプロパティとして追加されたため 以下のようにするだけでスクロールの滑りがUITableViewのデフォルトと同等になります。 self.webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal; iOS4でも
iOS/iPhone/iPad/MacOSX プログラミング, Objective-C, Cocoaなど UIWebView は指定されたリクエストに従いコンテンツをダウンロードする。この時にキャッシュをメモリに保存する。 キャッシュの制御には UIWebViewに渡す NSURLRequest で行う。 (例) NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:60.0];キャッシュポリシーは次の種類がある。NSURLRequst.h より転載。 enum { NSURLRequestUseProtocolCachePolicy = 0, NSURLRequestReloadIgnoringLoca
ここでは例としてこちらのWebページをUIWebViewで読み込み、そのリンクをクリックした時の動作を置き換えます。 UIWebViewでリンクをクリックした場合には以下のdelegateが呼ばれます。 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationTypeここで navigationType の値をチェックすると何のイベントで呼ばれたかが確認できます。 ここにはサブミット(フォーム入力時のsumbitボタンが押されたとき)のときには UIWebViewNavigationTypeFormSubmitted 、リロードされた時には UIWebViewNavigat
UIWebViewに表示しているHTMLに対して、Objective-CからJavaScriptを投げることができる。やり方は簡単で以下のとおり NSString *command =[NSString stringWithFormat:@"sample()"]; [webview stringByEvaluatingJavaScriptFromString:command]; NSStringにコマンドを入れて、そのUIWebViewに対して投げるだけ。 ただ、メッセージの受け取りはできないみたい。 注意点書きました
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く