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

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

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

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

Swift

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

Q&A

1回答

1084閲覧

【Swift】WKWebViewで表示したWebページのソースをコンソールで読みたい

kitokito-MAJIN

総合スコア10

JavaScript

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

Swift

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

0グッド

0クリップ

投稿2018/11/25 07:28

前提・実現したいこと

SwiftでWKWebViewを用いたWebViewアプリを作っています。

読み込んだwebページのソースをコンソールに表示させようと思い、javascriptを用いて表示させる試みをしました。

しかしながら、どうも意図した通りにソースが表示されません。

お力添えいただければ幸いです。

発生している問題・エラーメッセージ

コンソールには以下のように表示されています。
headやbodyの中身まで一語一句抜けのないソースを求めています。

Optional(<head></head><body></body>)

該当のソースコード

Swift

1 2import UIKit 3import WebKit 4 5class ViewController: UIViewController, WKUIDelegate 6{ 7 8 var webView: WKWebView! 9 10 override func loadView() 11 { 12 let webConfiguration = WKWebViewConfiguration() 13 webView = WKWebView(frame: .zero, configuration: webConfiguration) 14 webView.uiDelegate = self 15 view = webView 16 17 } 18 19 override func viewDidLoad() 20 { 21 super.viewDidLoad() 22 23 let myURL = URL(string: "https://www.apple.com/jp/") 24 let myRequest = URLRequest(url: myURL!) 25 webView.load(myRequest) 26 27 //ソースを表示 28 webView.evaluateJavaScript("document.documentElement.innerHTML", 29 completionHandler: { (html: Any?, error: Error?) in 30 print(html)}) 31 } 32 33 34 35} 36

試したこと

(1)読み込んだwebページが複雑である可能性を考え、徐々に簡易なwebページへ変えていき、最終的にはテキストのみのページを読み込みましたが、変化はありませんでした。

(2)macのsafariで同じjavascriptを用いたところ、意図した通りのソースを表示してくれたので、コンソールに表示できる文字数に制限がある可能性を考えましたが、そのような情報は見つかりませんでした。

補足情報(FW/ツールのバージョンなど)

Xcode Version 10.1

<Deployment info>
Deployment Target:12.1
Devices:Universal

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

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

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

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

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

guest

回答1

0

自分も今同じことをやってて、解決策に遭遇しました。
ついでにこのページにもたどり着いて、まだ答えがなかったので記載させていただきます。

https://stackoverflow.com/questions/34751860/get-html-from-wkwebview-in-swift

に書いてありますが、
If you wait until the page has loaded you can use:
の通り、読み込みを待つ必要があるみたいです。

試しにNavigationBarにボタンを表示し、押したタイミングで表示に切り替えてみたら、
普通に問題なく取得できましたよ。

viewdidAppearでもダメでした。GCDを使う必要がありそうですね。

>fuzzbalさん
すみません、良く調べてなかったですが、
もちろんdelegateありました。
https://qiita.com/shunyooo/items/d03a714af4dadd0727a6

みていただければ、ですが、
WKNavigationDelegateを設定し、
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {}
試してないですが、ここで行えば大丈夫だと思います。

ちなみに、下記に表示するコード含まれてます。
URL等変えれば流用できると思います、参考にどうぞ。
https://teratail.com/questions/169430

投稿2019/01/17 14:09

編集2019/01/19 15:12
hameji001

総合スコア639

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

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

kitokito-MAJIN

2019/01/18 09:30

ご回答ありがとうございます! 出来るだけ早く試し、ベストアンサーの判断をさせていただきたいと思います。
fuzzball

2019/01/18 09:34

読み込み完了のdelegateとか無いんですか?
hameji001

2019/01/19 15:09

コメントありがとうございます。 修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問