開発環境
xcode9.3
swift4
前提・実現したいこと
WKWebViewにDocumentsフォルダに保存したローカルのHTMLを読み込ませる機能を実装する際の不具合について質問をさせていただきます。
シミュレーターで実行する限りでは問題なく画面が表示されるのですが、
実機で試すと画面が真っ白になってしまい、描画されません
こちらの症状の原因について、何か心当たりがありましたら、お知恵をお借りしたく思います
試したこと
HTMLファイルのパスが正しいか → 問題ありませんでした
パスが指定するファイルに中身はあるか → String(contentsOfFile:,usedEncoding:)で読み込んだところ、全文を確認できました
Documentsフォルダからtmpフォルダに移して読み込む → 一部を読み込むことに成功しましたが、その他が描画されません。
大文字、小文字を混同していないか → 精査しましたが、見当たりませんでした
delegateをselfに設定する → 動作は変わりませんでした
load()をloadFileURL(:,allowingReadAccessTo:)に変更 → ボタンは読み込まれたが、スクリプトが反映されていない
該当のソースコード(抜粋)
swift
class WebViewControllerSwift: UIViewController ,WKUIDelegate ,WKNavigationDelegate, WKScriptMessageHandler, GIDSignInDelegate, GIDSignInUIDelegate{ var webView : WKWebView! // Google認証 private let service = GTLRSheetsService() override func viewDidLoad() { super.viewDidLoad() let htmlPath = "***/index.html" // injectionTimeでスクリプトの挿入タイミングを指定 let wkUserScript = WKUserScript(source: htmlPath, injectionTime: WKUserScriptInjectionTime.atDocumentEnd, forMainFrameOnly: true) let controller = WKUserContentController() controller.addUserScript(wkUserScript) // JavaScript連携 controller.add(self, name: "test") let configuration = WKWebViewConfiguration() configuration.userContentController = controller webView = WKWebView(frame: .zero, configuration: configuration) webView.uiDelegate = self view = webView let htmlUrl = URL(fileURLWithPath: htmlPath) let htmlRequest = URLRequest(url: htmlUrl) webView.load(htmlRequest) } }
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <link rel="stylesheet" href="./css/defalut.css"> </head> <body> <button onClick="test()">test</button> <script src="./js/init.js"></script> </body> </html>
回答1件
あなたの回答
tips
プレビュー