Day: March 31, 2016

Swift:URLとTitleを取り込むタイミング

webページのURLとTitleをどのタイミングで取り出せるか?

候補は次の2箇所。

  • func webView(sender: WebView!, didStartProvisionalLoadForFrame frame: WebFrame!)  {
  • func webView(sender:WebView, didFinishLoadForFrame frame:WebFrame) {

最初、webページを読み終わったあとだろうと思い、そこにしていました。しかし、読み込む間にほかのボタンが押されてしまうと、読み込み途中の表示のままになる可能性があり、開始時にURLとタイトルを拾えるならそこの方がいいと思うようになりました。

調べたら、開始時にURLもTitleも拾えます。

もう一点留意すべきは次のことです。

  • didStartProvisionalLoadForFrameはひとつのURLを指示して読み込み終了までの間に何回も呼ばれる。
  • didFinishLoadForFrameは最後に1回だけ呼ばれる。
  • URL読み込みが終わったあとに(自分で書いたコードを抜けたあとに)、さらにdidStartProvisionalLoadForFrameが呼び出される可能性があります(実際に呼ばれています)。しかもそのあとにdidFinishLoadForFrameは呼ばれません。これは回避するようにしないとアプリの不具合につながるかもしれないので、調査中。
  • これは、javaがonのときのrefresh?

Swift:URLの読み込み方式

ページの一部にリンク(URL)が正しく入っていない問題が発生しました。

URLを読み込んだページにあるリンクが、あるものは読めるが、ほかのものは読み込めないことがわかりました。ロジックミスやInterface builderを修正していろいろ試したのですが、うまくいきません。

それで次のようなことがわかってきました。pURLはhttp:// or https://ではじまるアドレスが入っています。

  • 正しくリンクが入ってくる。
    xWebView!.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: pURL)!))
  •  リンクが入ってこないケースがある。
    do { wString = try NSString(contentsOfURL:NSURL(string:pURL)!, encoding:A.currentEncode)
    } catch let error as NSError {  wEStatus    =   “\(error)” } 
    if wEStatus == “” {
    xWebView!.mainFrame.loadHTMLString(String(wString),baseURL:nil) }

次のように修正したら、リンクが入ってきました。

  •  正しくリンクが入ってくる。
    do { wString = try NSString(contentsOfURL:NSURL(string:pURL)!, encoding:A.currentEncode)
    } catch let error as NSError {  wEStatus    =   “\(error)” }  
    if wEStatus == “” {
    xWebView!.mainFrame.loadHTMLString(String(wString),baseURL:pURL) }