Android-веб-просмотр дочернего просмотра не виден - PullRequest
0 голосов
/ 08 октября 2019

Я создал очень простое приложение для веб-просмотра, которое показывает страницу. На этой странице некоторые JS звонят window.open и, в конечном итоге, window.close, чтобы открыть социальный логин и закрыть его по завершении.

Когда происходит звонок window.open, веб-просмотр не заметно появляются. Я основал это на других SO вопросах по этой теме, но не могу заставить его работать.

Вот мой код:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // Get the web view settings instance
    val settings = webView.settings

    // Enable and setup web view cache
    settings.setAppCacheEnabled(true)
    settings.cacheMode = WebSettings.LOAD_DEFAULT
    settings.setAppCachePath(cacheDir.path)

    // Enable zooming in web view
    settings.setSupportZoom(true)
    settings.builtInZoomControls = true
    settings.displayZoomControls = true

    // Enable safe browsing if possible
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        settings.safeBrowsingEnabled = true  // api 26
    }

    // Enable hardware acceleration
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null)

    // Important for popup windows to work
    settings.javaScriptCanOpenWindowsAutomatically = true
    settings.domStorageEnabled = true
    settings.javaScriptEnabled = true
    settings.loadsImagesAutomatically = true
    settings.blockNetworkImage = false
    settings.setSupportMultipleWindows(true)

    // Set web view client
    val webViewClient = object : WebViewClient() {
        override fun shouldOverrideUrlLoading(
            view: WebView?,
            request: WebResourceRequest?
        ): Boolean {
            view?.loadUrl(url)
            return true
        }
    }
    webView.webViewClient = webViewClient

    webView.webChromeClient = object: WebChromeClient() {
        override fun onCreateWindow(
            view: WebView?,
            isDialog: Boolean,
            isUserGesture: Boolean,
            resultMsg: Message?
        ): Boolean {
            val newWebView = WebView(this@MainActivity)
            newWebView.settings.javaScriptEnabled = true
            newWebView.settings.setSupportMultipleWindows(true)
            newWebView.webViewClient = object : WebViewClient() {
                override fun shouldOverrideUrlLoading(
                    view: WebView?,
                    request: WebResourceRequest?
                ): Boolean {
                    view?.loadUrl(url)
                    return true
                }
            }

            view?.addView(newWebView)
            view?.bringChildToFront(newWebView)
            newWebView.visibility = View.VISIBLE

            val transport = resultMsg?.obj as WebView.WebViewTransport
            transport.webView = newWebView
            resultMsg?.sendToTarget()

            return true
        }

        override fun onCloseWindow(window: WebView?) {
            val parent = window?.parent as WebView
            parent.removeView(window)
        }
    }

    webView.loadUrl(url)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...