В Android Webview открывать окно можно только один раз - PullRequest
0 голосов
/ 11 октября 2018

Мой веб-сайт (используйте laravel) вызывает метод window.open для этого кода

window.open('My_URL','_blank');

, и мой веб-браузер Android открывает новое окно в диалоговом окне.код

override fun onCreateWindow(view:WebView, isDialog:Boolean,
    isUserGesture:Boolean, resultMsg:Message):Boolean {

    // set dialog webview
    val dialog = Dialog(context)
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
    dialog.setContentView(R.layout.activity_webview)

    val newWebView = dialog.findViewById<WebView>(R.id.WebView)

    newWebView.settings.javaScriptEnabled = true
    newWebView.loadUrl(view?.url)

    // open dialog full screen
    val window = dialog.window
    val wlp : WindowManager.LayoutParams = window.attributes
    wlp.gravity = Gravity.CENTER
    wlp.flags = WindowManager.LayoutParams.FLAG_BLUR_BEHIND
    window.attributes = wlp
    dialog.window.setLayout(WindowManager.LayoutParams.MATCH_PARENT,
        WindowManager.LayoutParams.MATCH_PARENT)
    dialog.show()
    (resultMsg.obj as WebView.WebViewTransport).setWebView(newWebView)
    resultMsg.sendToTarget()

    newWebView.setWebViewClient(object: WebViewClient() {

    })

    newWebView.setWebChromeClient(object:WebChromeClient() {
        override fun onCloseWindow(window:WebView) {
            dialog.dismiss()
            window.destroy()
            newWebView.destroy()
            //webview.removeView(newWebView)
        }
    })

    return true
}

это была успешная работа только один раз.

что мне делать?

1 Ответ

0 голосов
/ 11 октября 2018

Не уверен, поможет ли это вам или нет, но, насколько я знаю, приложение для Android должно обеспечивать обработку запросов на открытие и закрытие окна от javascript.Я имею в виду, что это работает из коробки, но очень часто не так, как ожидается / необходимо.

Можно показать отдельную сеть window как диалог, но, как я знаю, диалоги не могут складыватьсяи появляются друг на друге.Такой подход подходит для случая, когда вам нужно открыть (а затем закрыть) только один отдельный window.Пожалуйста, прочитайте больше о диалогах здесь .

. Я предлагаю показывать отдельные WebView на каждый window.open() запрос.Пожалуйста, посмотрите на этот ответ , где подобное решение было решено.В вашем случае (где возможно любое количество открытых окон) вы можете использовать LinkedList из WebView с, выдвигая новое на window.open() и поднимая верхние на window.close.

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