我有一个加载到 WebView 中的本地 css 文件,显示没有任何问题。这是一个联系人屏幕,因此它有电话号码、电子邮件地址和网站。当我点击电话号码或电子邮件地址时,手机会(分别)毫无问题地打开拨号器或电子邮件应用程序,但我无法打开该网站的 URL。我在下面包含了我的 webView 设置和我的 css 文件
WebView webView = (WebView) findViewById(R.id.webView);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("file://" + htmlManager.htmlFilePath(HtmlManager.kHtmlFilenameContactUs));
CSS
<div>
<table>
<tr>
<td>
<table>
<tr>
<td>Phone:</td>
<td>123.456.7890</td>
</tr>
<tr>
<td>Email:</td>
<td><a href="mailto:customerservice@abc.com" target="_blank">customerservice@abc.com</a></td>
</tr>
<tr>
<td>Website:</td>
<td><a href="http://www.google.com" target="_blank">www.google.com</a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body></html>
最佳答案
你应该像这样扩展你的WebViewClient
public static class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("mailto:")) {
MailTo mt = MailTo.parse(url);
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_EMAIL, new String[] { mt.getTo() });
i.putExtra(Intent.EXTRA_SUBJECT, mt.getSubject());
i.putExtra(Intent.EXTRA_CC, mt.getCc());
i.putExtra(Intent.EXTRA_TEXT, mt.getBody());
mContext.startActivity(Intent.createChooser(i, "Send mail..."));
return true;
} else if (url.startsWith("http://")) {
view.loadUrl(url);
return true;
}
return true;
}
};
并且不要忘记将您的客户端设置为 WebView
webView.setWebViewClient(new MyWebViewClient ());
编辑:我刚刚注意到 URI 包含属性 target="_blank"。比你应该的
webView.getSettings().setSupportMultipleWindows(true);
或者像这样用 javascript 做肮脏的 hack 并删除 target="_blank"
webView.loadUrl("javascript:(function(){ /*code that removes attribute*/ })()");
取决于您是想在新的浏览器窗口中打开 URL,还是在您的 WebView
中加载 url
关于Android:如何在本地 css 文件中打开 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715468/