#概要
iOSのWebViewは、デフォルトでページ内アンカー(#)へリンクできないようです。
例
http://www.xxxx.yyyy.html?aaaa#pagetop
対応策
JavaScriptのwindow.location.hash = "アンカー名"を呼ぶ
参考ソースコード
ViewController.swift
//MARK: - UIWebViewDelegate
extension ViewController: UIWebViewDelegate {
func webView(webView: UIWebView, shouldStartLoadWithRequest
request: NSURLRequest,
navigationType: UIWebViewNavigationType) -> Bool {
if let scheme = request.URL?.scheme {
if scheme.hasPrefix("http") || scheme.hasPrefix("https") {
//ページ内アンカー移動
let anchor = request.URL?.absoluteString.componentsSeparatedByString("#")
if anchor?.count > 1 {
self.webView.stringByEvaluatingJavaScriptFromString("window.location.hash = \"\(anchor?.first)\"")
}
return true
}
}
return false
}
}
まとめ
ページ内のアンカーへリンクするためには、JavaScriptで操作する必要があるようです。
他の方法がありましたら、ご教授頂ければ幸いです。
こちらも合わせて読んでください♥
[WebViewシリーズ①] WebViewのイベントをフックする
[WebViewシリーズ②] WebView内でJavaScriptのメソッドを操作する
[WebViewシリーズ③] WebViewは、ページ内のアンカーへリンクできない??
[WebViewシリーズ④] WebView(アプリ内)のリンクからiTunesが表示できない