添加 WebViewClient 时,Android WebView 忽略目标 ="_blank"

标签 android webview webviewclient

我遇到了一个奇怪的问题。

在我的应用程序中,我需要从 Assets 文件夹加载基于 WebView 中单击按钮的静态 html 文件。

现在5个html文件中,一个html文件包含15个静态链接。这些链接需要将用户重定向到移动浏览器中提到的 url。为此,我在我的 html 文件中使用了 target="_blank"

<div class="lid"><a href="https://www.irctc.co.in/" target="_blank">Railway Reservation </a></div>

现在,这在一个简单的 WebView 没有添加任何 WebViewClient 的示例应用程序中运行良好。

但我需要一个 WebViewClient 来实现我的其他功能。所以当时target="_blank"完全被忽略了。并且 url 在 WebView 本身中打开。

我找到了一个解决方法,我可以使用 shouldOverrideUrlLoading 如下:

myWebView.setWebViewClient(new WebViewClient(){
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
    // TODO Auto-generated method stub

        if(url.equalsIgnoreCase("https://www.irctc.co.in/"))
        {
            view.getContext().startActivity(
                            new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
        }
        else
            return super.shouldOverrideUrlLoading(view, url);
    }
});

所以这是在默认浏览器中打开特定的 url。

所以基本上我的问题是:

为什么在我们使用 WebViewClient 时忽略了 target="_blank"?这个问题还有其他解决方法吗?因为我有 15 个链接,我需要比较它们。我无法在新浏览器中加载所有网址,因为有一些链接也需要在同一个 WebView 中打开。

最佳答案

我有一个解决方法。用自定义模式替换所有应该在新窗口中打开的链接。然后你就可以自己处理了。

为了尽量减少中断,还设置了自定义主题并处理所有配置更改:

<activity android:name="com.example.LinkHandler"
          android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
          android:theme="@android:style/Theme.Translucent">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>

        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>

        <data android:scheme="your.link.handler.schema"/>
    </intent-filter>
</activity>

然后在您的链接处理程序中,您可以使用 getIntent().getData() 读取 url。

还请记住,您应该处理 http 和 https,我在上面的简短示例中跳过了这一点。

这是一个如何重写 url 的 JavaScript 示例:

for(var i=0; i<document.links.length; i++) {
    if(document.links[i].target == "_blank") {
        document.links[i].href = "your.schema.for."+document.links[i].href;
    }
}
<ul>
    <li><a href="http://example.com">Test 1</a></li>
    <li><a href="http://example.net" target="_blank">Test 2</a></li>
    <li><a href="https://example.com" target="_blank">Test 3</a></li>
    <li><a href="https://example.net">Test 4</a></li>
</ul>

关于添加 WebViewClient 时,Android WebView 忽略目标 ="_blank",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26031620/

相关文章:

带有图像和子文本的 Android GridView : Issue

android - 使用 Html.fromHtml 设置自定义字体

android - 获取 java.io.IOException : HTTP request failed, HTTP 状态 : 404 in ksoap2 while passing xml data to soap1. 2 android

android - Android 的 WebView 中的 shouldOverrideUrlLoading 未运行

android - Listview 快速滚动时跳到底部

android - 使用 WebView 在 Android 应用程序中对齐文本但呈现类似 TextView 的界面?

java - 在 android web View 中,html 页面被视为在大屏幕而不是在移动设备中打开

android - Android Webview 中的 Youtube 直播流很紧张

java - 网页 View : add custom headers when user click webview links

Android webview 页面不可用