如何在默认浏览器中打开Android中onCreateWindow的请求?

时间:2019-07-09 05:22:10

标签: android kotlin browser webview window

我正在使用Android / Kotlin WebView。我已经设定了,

 webView.webViewClient = MyWebViewClient(mContext)
 webView.webChromeClient = MyWebViewChromeClient(mContext)

val settings = webView.settings
    settings.userAgentString = "App Agent"
    settings.javaScriptCanOpenWindowsAutomatically = true
    settings.setSupportMultipleWindows(true)

现在,当Web应用程序发出新窗口请求时,当前它正在使用webView之类的应用程序打开新窗口,

class MyWebViewChromeClient(private val mContext: BaseActivity): WebChromeClient() {

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

        val window = WebView(mContext)
        // set settings
        val parent: RelativeLayout? = mContext.findViewById<RelativeLayout>(R.id.mainLayout)
        parent?.removeAllViews()
        parent?.addView(window)

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

        return true
    }
}

那么,如何使用Android默认浏览器打开新窗口请求?

2 个答案:

答案 0 :(得分:1)

onCreateWindow 方法内的链接从以下代码获取URL:

工作解决方案

override fun onCreateWindow(view: WebView?, isDialog: Boolean, isUserGesture: Boolean, resultMsg: Message?): Boolean {
    mContext.runOnUiThread {
        try {
            // here `url` parameter is the caller url
            mContext.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(view.url))))
        }catch (e: Exception){
            EmrLogger.e(classTag, e)
        }
    }

    return true
}

mContext 是创建webView的上下文。

编辑

WebView newWebView = new WebView(getContext());
newWebView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageStarted(WebView view, String url,
            Bitmap favicon) {
         // Here param `url` is the target url
        super.onPageStarted(view, url, favicon);
    }
});
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
resultMsg.sendToTarget()

答案 1 :(得分:0)

Foowing Rahuls的答案我发现了一种可以快得多的方法,您只需要关闭网络负载即可,这样Webview确实不会加载,但会为您提供目标(如果您希望最后重定向的目标只是保持负载不变) )。 这对我有所帮助,所以我认为也可能对其他人有帮助。

WebView newWebView = new WebView(myActivity);
                newWebView.setWebViewClient(new WebViewClient(){
                    @Override
                    public void onPageStarted(WebView view, String url,
                                              Bitmap favicon) {
                        // Here param `url` is the target url

                        super.onPageStarted(view, url, favicon);

                        view.destroy();
                    }
                });
                newWebView.setNetworkAvailable(false);
                newWebView.getSettings().setBlockNetworkLoads(true);
                WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
                transport.setWebView(newWebView);
                resultMsg.sendToTarget();