添加WebViewClient时,Android WebView忽略target =“_ blank”

时间:2014-09-25 05:58:30

标签: android webview webviewclient

我面临一个奇怪的问题。

在我的应用程序中,我需要根据资产文件夹中的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);
    }
});

所以这是在默认浏览器中打开该特定网址。

基本上我的问题是:

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

1 个答案:

答案 0 :(得分:4)

我有一个解决方法的想法。使用自定义架构替换应在新窗口中打开的所有链接。然后你可以自己处理。

对于最小的中断,还设置自定义主题并处理所有配置更改:

<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()来阅读网址。

请记住,你应该处理http和https,我在上面的简短例子中跳过了。

以下是如何重写网址的JavaScript示例:

&#13;
&#13;
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;
    }
}
&#13;
<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>
&#13;
&#13;
&#13;