我面临一个奇怪的问题.
在我的应用程序中,我需要根据资产文件夹中的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,我在上面的简短例子中跳过了.
这是一个如何重写网址的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>