質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3184閲覧

(xcode)WKWebViewでローカルHTMLを読み込もうとしたが、シミュレーターでは成功し、実機では描画されない

m_k_

総合スコア11

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/04/25 02:06

編集2018/04/25 03:13

開発環境

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>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/04/25 02:50

コードは ``` で囲って下さい。
fuzzball

2018/04/25 02:52

WebViewはエラーを起こしていないでしょうか?適当なdelegateを実装して確認して下さい。
fuzzball

2018/04/25 02:54 編集

症状を再現できる&ここに掲載できるhtmlを用意出来ないでしょうか?
m_k_

2018/04/25 02:56

早速のご回答ありがとうございます。delegateについて、もう一度確認し直してみます
m_k_

2018/04/25 03:10

delegateを設定し直してみましたが、症状は改善されません
m_k_

2018/04/25 04:08

その他、試した結果を追記しております。
guest

回答1

0

ベストアンサー

使ったこともなく、動作検証も行っていませんが、

swift

1let htmlPath = "***/index.html" 2let wkUserScript = WKUserScript(source: htmlPath, ...

WKUserScript(source:injectionTime:forMainFrameOnly:)のsourceにはJavaScriptを指定するのではないでしょうか?

しかもsourceは、

The script’s source code.

と書かれていますので、パスを書くのではなく、JavaScriptのソースコードを渡さないといけないんじゃないかと思います。

まとめると、

  1. init.jsを読み込んで、
  2. WKUserScript(source:injectionTime:forMainFrameOnly:)のsourceに渡す。

なぜシミュレータで動いているのかは分かりませんが‥。
(JavaScriptも実行できているのでしょうか?)

投稿2018/04/25 04:07

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m_k_

2018/04/25 04:10

回答ありがとうございます。 ご指摘いただいた点を踏まえて、再度検証したく思います。 またJavaScriptの件ですが、シミュレータでは問題なく動作を確認しています
m_k_

2018/04/25 05:35

今、実機での動作ができることを確認し終わりました。 やはり、WKUserScript()の引数指定に誤りがあったようです。 何故シミュレーターで動いたかは不明ですが、それは追って調査していこうと思います。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問