タグ別アーカイブ: webArchive

Swift:.webarchiveのリンクの処理

saveしたwebページのリンクをクリックしたときの処理を追加しました。

.webarchiveファイルに落とすと、リンクが有効になったり、無効になったりします。webページの作りに影響されるようです。

それで、.webarchiveのwebページのリンクをベースURLにして、その中に定義されているリンク(URL)をクリックされたとき、その場所に飛んで行くようにしました。リンクの生成は比較的簡単にできます。

注意点は、次の2点。

① func webView(_ sender: WebView!, didStartProvisionalLoadForFrame frame: WebFrame!)

  • xWebView?.mainFrameURLの先頭が”file”であること。
  • xWebView?.mainFrameURLの末尾が”.html”であること。

② func webView(_ sender:WebView, didFinishLoadForFrame frame:WebFrame)

  • たとえば、.webarchiveファイルを読み込み指示をかけるときに1、ここ②でそれが1なら2をセットし、base URLが有効であることを保証し、あとでリンクがクリックされたとき、つまり①でリンクを読み込むとき、これをリセットするようにする。
  • リンクを読み込むとき、つまり、html(webページ)を読み込むとき、あるいは.webarchiveのリンクを読み込むときは、-1にしてbase URLを無効にする。
  • httpsを.webarchiveに落としたときだけなのかどうか不明だが、webViewのloadが終了してもさらに①に遷移して処理を継続する場合があるので、ここでのリセットは必須。
  • このほか、当該webページに戻る場合、たとえばホームがクリックされた場合、file:///Users/hk/Library/Containers/com.wordpress.raizangawa.MesaClip/Data/MesaClip/のようなURLにリンクが変換されているので、この場合、base URLを読み込むようにさせないと、このリンクだけ読み込めなくなる。
  • if (xWebView?.mainFrameURL)! + “Data/MesaClip/” == (A.tempFolderURL?.absoluteString)!のように書く。そうしないと、optionalとの比較になり、正しい結果が得られない。

obj.C:進展なしで疑問ばかり

次の問題は修正したWebViewのキャッシュのsaveの仕方です。

キャッシュのsaveの仕方

昨夜、WebViewを編集可能にしておけば読み込んだwebサイトの修正ができることがわかりました。記憶が正しければ、編集したものもキャッシュされていたので、saveする方法がわかれば一歩前進と思いました。

WebKit検証(7) – WebArchive形式で保存では、次のような手順でキャッシュをsaveできると記述してありました。

IBOutlet WebView *xbWebView;//.hでに定義
WebDataSource *dataSource = [[xbWebView mainFrame] dataSource];//データソースの設定

WebArchive *webArchive = [dataSource webArchive];//archive形式<—データソース
Data *data       = [webArchive data];/data object<—archive形式

しかし、実際に試してみると、確かにキャッシュはsaveされていますが、修正した内容ではありません。[[xbWebView mainFrame] dataSource];がうまく行っていないのでしょうか?調査する必要があります。

NSMutableArrayのsaveの仕方

それはそうと、以前うまく行かなかったNSMutableArrayのsaveはData *data       = [webArchive data];を使ってできそうな気がしてきました。試してみる価値がありそうです。というか、全くno ideaなので試さないといけません。

そんなこんなで進展がありません。

@interface MesaCont : NSDocument問題

他方、NSDocument-based ApplicationでないとWebViewが取り扱えないのかどうか?@interface MesaCont : NSObjectのままでも、#import <WebKit/WebKit.h>と書けば、@interface MesaCont : NSDocumentでなくてもbuild errorは出ないのですが、実行すると落ちてしまいます。思いついたのでやったのですが、ダメでした。

いずれも問題が顕在化しただけで解決しませんでした。

IMG_3302あっと言う間もなくつつじが咲きはじめました。2014.4.7