【问题标题】:shouldInterceptRequest opening link in browsershouldInterceptRequest 在浏览器中打开链接
【发布时间】:2013-09-20 10:18:54
【问题描述】:

在我的应用程序中,我有一个显示图像的 web 视图。我想拦截对图像的点击并在浏览器中打开图像的 href 属性指向的 URL。 我正在使用来自 WebViewClient 的 shouldInterceptRequest 方法,但我不确定从该方法返回什么作为响应。 我想做的看起来像:

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
            final Intent browserIntent = new Intent (Intent.ACTION_VIEW, Uri.parse(url));
            startActivityForResult(browserIntent);
            return null;     
}

实现这一点的正确方法是什么? 我的 WebResourceResponse 对象应该包含什么?

【问题讨论】:

    标签: android android-webview


    【解决方案1】:

    如果你想拦截href点击,你应该使用这个shouldOverrideUrlLoading: http://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading(android.webkit.WebView, java.lang.String)

    shouldInterceptRequest 每次加载资源时都会调用,例如 css 文件、js 文件等... shouldOverrideUrlLoading 在即将打开新页面时调用

    这是你想要做的:

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setData(Uri.parse(url));
        startActivityForResult(i);
        return true;
    }
    

    【讨论】:

    • 如果我错了,请纠正我,但 shouldOverrideUrlLoading 仅返回 true,而实际覆盖发生在 'onLoadResource' 方法中,每次加载资源(css 文件、js 文件)时都会再次调用该方法。
    • 如果您的 ShouldOverrideUrlLoading 实现返回 true,那么您必须自己管理操作。如果您返回 false,新页面将在您的 webview 中打开。
    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    相关资源
    最近更新 更多