在WebView中,有一种方法可以让shouldOverrideUrlLoading确定它是否正在捕获重定向而不是用户单击链接?

cot*_*aws 20 android webview

我想允许重定向在WebView中自然发生,并且只有在用户点击某些内容时才会发现新的URL.

che*_*hef 19

我遇到了类似的问题.我需要在我的活动中打开WebView中的页面.但是,当用户点击页面中的链接时,我希望它在"新窗口"中打开,这意味着浏览器活动.如果页面具有重定向,则会出现问题.为了实现这一目标,我做了以下事情:

  1. 我只在页面加载完成后才显示webview.
  2. 我保留一个布尔告诉我页面何时加载完毕.用户交互只能在页面加载完成后发生.否则它是一个重定向,应该在我的活动中打开.

代码示例:

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)


cod*_*ark 8

不直接,没有.

您可以使用的组合WebViewClient.onPageStarted,并WebView.getOriginalUrl设法确定URL为显示是原来的一个请求,但这是以后WebView决定加载的URL.这可以帮助确定是否发生了重定向,但仍然无法区分用户事件和不会导致重定向的脚本事件.

如果您控制Web内容的内容,您还可以以某种可识别的方式对用户可单击的Url进行编码(例如,专有方案而不是http),并在您的shouldOverrideUrlLoading实现中符合条件时执行所需的任何其他处理.