我想允许重定向在WebView中自然发生,并且只有在用户点击某些内容时才会发现新的URL.
che*_*hef 19
我遇到了类似的问题.我需要在我的活动中打开WebView中的页面.但是,当用户点击页面中的链接时,我希望它在"新窗口"中打开,这意味着浏览器活动.如果页面具有重定向,则会出现问题.为了实现这一目标,我做了以下事情:
代码示例:
private boolean mLoaded = false;
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(mLoaded){ // open in new browser window only if page already finished
try
{
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
activity.startActivity(intent);
}
catch (Exception e)
{
Logger.log(e);
}
}
return true;
}
@Override
public void onPageFinished(WebView webView, String url) {
layoutHoldingTheWebView.setVisibility(View.VISIBLE);
mLoaded = true;
}
}
Run Code Online (Sandbox Code Playgroud)
cot*_*aws 11
我刚刚在SDK中发现了可能有用的东西,WebView.getHitTestResult()如果有人看到这个方法有任何缺陷,请告诉我.
以下是我如何使用它的示例:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(view.getHitTestResult().getType() > 0){
// From a user click, handle it yourself.
return true;
} else {
// Nothing clicked, assumed to be a redirect, let it redirect.
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
不直接,没有.
您可以使用的组合WebViewClient.onPageStarted,并WebView.getOriginalUrl设法确定URL为显示是原来的一个请求,但这是以后的WebView决定加载的URL.这可以帮助确定是否发生了重定向,但仍然无法区分用户事件和不会导致重定向的脚本事件.
如果您控制Web内容的内容,您还可以以某种可识别的方式对用户可单击的Url进行编码(例如,专有方案而不是http),并在您的shouldOverrideUrlLoading实现中符合条件时执行所需的任何其他处理.
| 归档时间: |
|
| 查看次数: |
17339 次 |
| 最近记录: |