Skip to content

Instantly share code, notes, and snippets.

@wheeliechamp
Created October 18, 2021 15:04
Show Gist options
  • Save wheeliechamp/278019736c27554d2afa02c91076c1b1 to your computer and use it in GitHub Desktop.
Save wheeliechamp/278019736c27554d2afa02c91076c1b1 to your computer and use it in GitHub Desktop.
@JavascriptInterface に解析用メソッド呼び出しを追加
package com.example.webscrapingtest.view
import androidx.lifecycle.ViewModelProvider
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.JavascriptInterface
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.databinding.DataBindingUtil
import com.example.webscrapingtest.R
import com.example.webscrapingtest.databinding.MainFragmentBinding
import com.example.webscrapingtest.viewmodel.MainViewModel
import kotlinx.android.synthetic.main.main_fragment.view.*
class MainFragment : Fragment() {
private lateinit var webViewModel: MainViewModel
private lateinit var binding: MainFragmentBinding
companion object {
fun newInstance() = MainFragment()
}
private lateinit var viewModel: MainViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = DataBindingUtil.inflate(inflater, R.layout.main_fragment, container, false)
binding.setLifecycleOwner(this)
val view = binding.root
view.webView.settings.javaScriptEnabled = true
// 規定のブラウザではなく、WebViewで表示するためコード
view.webView.webViewClient = object : ViewSourceClient(){}
view.webView.addJavascriptInterface(this, "fragment")
view.webView.loadUrl("https://yahoo.co.jp/")
return binding.getRoot()
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
}
open class ViewSourceClient : WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
view.loadUrl("javascript:window.fragment.viewSource(document.getElementsByTagName('html')[0].outerHTML);")
}
}
@JavascriptInterface
fun viewSource(src: String) {
// 追加
viewModel.analyzeHtml(src)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment