2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【WKWebView】loadFileURLの取得元をBundleから変更したら、.jsファイルが読み込まれなくなった!

Last updated at Posted at 2020-03-02

#結論
loadFileURL(_:allowingReadAccessTo:)の引数は確認しよう!

#環境
Xcode 11.3.1
Swift 5

#WKWebViewあるある
WKWebViewでローカルのHTMLを読み込もう! と意気込んでGoogle検索した場合は、大抵こんな感じの答えが帰ってきます。

let localurl = Bundle.main.url(forResource: "hoge", withExtension: "html")!
webview.loadFileURL(localurl, allowingReadAccessTo: localurl)

とりあえず動きを見るだけならBundle参照の方が圧倒的に楽なので、非常に合理的なサンプルコードです。
また、正直WebViewは表示した後のJS-Swift間のやり取りがみんな気になるので、この辺は割とさらっと済ませてしまいます。

で、それなりに実装が進んでDocumentsとかLibraryにリソースを配置するぞおおおおおおとなった時に、横着するとソースはこうなります。

let localurl = URL(fileURLWithPath: NSHomeDirectory() + "/Library/hoge.html")
webview.loadFileURL(localurl, allowingReadAccessTo: localurl)

(実際はもっと丁寧に文字列定義するとは思う)
この時に、allowingReadAccessToの値をそのままにしちゃうと、JavaScriptとかCSSファイルが読み込めなくなっちゃいます。

let localurl = URL(fileURLWithPath: NSHomeDirectory() + "/Library/hoge.html")
let allowAccess = URL(fileURLWithPath: NSHomeDirectory())
webview.loadFileURL(localurl, allowingReadAccessTo: allowAccess)

こんな感じで、allowingReadAccessToに適切なアクセス範囲を指定してあげると、
Bundleから読み込んでいた時と同じ挙動になると思います。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?