Swift

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との比較になり、正しい結果が得られない。

Categories: Swift, 技術

Tagged as: , ,