java - webview在新片段选项卡中打开目标_blank
问题描述
我尝试从这篇文章中从 WebChromeClient 的 onCreateWindow 打开目标 _blank
Android - 使用外部浏览器在 WebView 中打开目标 _blank 链接
但数据返回空值。
示例网站 getintopc.com
@Override
public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg)
{
WebView.HitTestResult result = view.getHitTestResult();
String data = result.getExtra();
models.add(models.size() - 1, new WebpageModel(DEFAULT_TITLE,
data));
navDrawerAdapter.notifyDataSetChanged();
fragments.add(WebpageFragment.newInstance(fragments.size(),
models.get(models.size() - 2).getUrl()));
getActivity().getSupportFragmentManager().beginTransaction()
.hide(fragments.get(current_position))
.add(R.id.container, fragments.get(fragments.size() - 1))
.commit();
current_position = fragments.size() - 1;
return false;
}
伙计们,我发现这个项目有效。
http://therockncoder.blogspot.com/2014/04/understanding-androids-webchromeclient.html?m=1
它使用目标 _blank 的 url 创建新的 webview。但问题是我无法获取网址。我只想要 url,因为我用不同片段选项卡的相同 webview 打开它。
例如我测试了 getintopc.com
解决方案
最后来自这个问题底部的一些提示
Android - 使用外部浏览器在 WebView 中打开目标 _blank 链接
mWebView.getSettings().
setSupportMultipleWindows(true);
@Override
public boolean onCreateWindow(WebView
view, boolean dialog, boolean userGesture, Message
resultMsg)
{
WebView newView = new
WebView(getActivity());
WebSettings settings =
newView.getSettings();
settings.setJavaScriptEnabled(true);
settings.
setJavaScriptCanOpenWindowsAutomatically(true);
settings.
setSupportMultipleWindows(true);
settings.setUseWideViewPort(false);
newView.setWebViewClient(new
WebViewClient() {
@Override
public boolean
shouldOverrideUrlLoading(WebView view, String urls) {
models.add(models.size() - 1,
new WebpageModel(DEFAULT_TITLE,
urls));
navDrawerAdapter.notifyDataSetChanged();
fragments.
add(WebpageFragment.newInstance(fragments.size(),
models.get(models.size() - 2).getUrl()));
getActivity().
getSupportFragmentManager().beginTransaction()
.hide(fragments.get(current_position))
.add(R.id.container,
fragments.get(fragments.size() - 1))
.commit();
current_position =
fragments.size() - 1;
return true;
}
});
WebView.WebViewTransport transport =
(WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newView);
resultMsg.sendToTarget();
return true;
}
但是当我在 getintopc.com 中按下下载按钮时,与其他浏览器不同,它会等待几秒钟并创建新标签并给我要立即下载的文件,而不是去处理下载并等待几秒钟的页面。
对于具有目标 _blank 的其他站点工作正常!
推荐阅读
- java - AlertDialog.Builder() 的参数是什么?
- javascript - 通过单击任何地方关闭javascript弹出窗口?
- javascript - 我无法更改随机选择的地方的颜色
- azure - 天蓝色应用程序网关不适用于 502
- mysql - MySQL Where 语句同时检查值
- c - TCP Server on LwIP raw API - question about tcp_close and accept callback
- php - 递归数组搜索 - 保持正确的顺序并向下迭代数组
- java - 无法“重新绑定”到同一服务
- python - django urls 语法无效
- c++ - 为什么我在终端中收到 cmath 错误?