Swift

Swift:プログレス

プログレスの開始・終了について整理します。

didStartProvisionalLoadForFrame (開始)

  • ひとつのポイントは、webページだけでなく、.webarchiveファイルをwebViewに書き込むことになる場合、同じようにそれぞれのwebViewに飛んでくることです。
  • .webarchiveファイルのリンクをクリックしたとき、リンクがfile:の場合、webページのリンクに変換します。httpから始まる場合、そのまま利用します。
  • domainのURLを再クリックしたとき、永久ループしないように中断します。
  • 最初にプログレスを有効にしているので、これがリセットされるまではプログレスはアニメーションを繰り返します。didReceiveIconとdidFinishLoadForFrameでリセットしています。faviconが必ずあるとは限らないので、didFinishLoadForFrameでもリセットする必要がありました。

screenshot-2016-12-04-11-35-55

didReceiveIcon (favicon)

  • 読み込んだSafarのbookmarkにfaviconが登録されていないとき、faviconを登録します。
  • み込んだSafarのbookmarkをクリックして、現在のwebページを読み込んでいるのですが、URLが異なる形式の場合があるので、URLを差し替えます。
  • webページの情報を登録します(ExecRegisterCurrentWebPage)。

screenshot-2016-12-04-11-42-39

didFinishLoadForFrame (終了)

  • iOSはdidFinishLoadで一元的にやればいいという記述がありました。macOSの場合、相当するものがわからなかったので、ここで完了処理をしています。
  • すべてfaviconがあれば、ここでの処理は不要です。
  • 開始と同様に終了へも何回も飛んで来ます。しかも、on / offはペアでないので、その配慮も必要です。

screenshot-2016-12-04-11-50-41