我正在使用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默认浏览器打开新窗口请求?
答案 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();