在Android Webview窗口中打开工作仅一次

时间:2018-10-11 04:49:25

标签: android laravel webview kotlin

我的网站(使用laravel)在此代码上调用window.open方法

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

和我的Android Webview在对话框上打开新窗口。代码是

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 :(得分:1)

不确定它是否对您有帮助,但是据我所知,Android应用程序应处理来自javascript的打开和关闭窗口请求。我的意思是说它确实是开箱即用的,但通常不是期望/需要的方式。

可以将单独的网站window显示为对话框,但是据我所知,对话框无法堆叠并彼此叠加显示。当您只需要打开(然后关闭)一个单独的window时,这种方法很合适。请阅读有关对话框here的更多信息。

我建议在每个WebView请求中分别显示window.open()。请查看解决了类似解决方案的answer。对于您的情况(可能有打开的窗口),您可以使用LinkedListWebView,在window.open()上推一个新窗口,然后在window.close上弹出一个窗口。 / p>