我有一个加载网站的WebView
,一旦我按下该网站的某些元素,WebView就会在按下的元素上放置某种蓝色叠加层。
无论如何都要删除此行为?
提前致谢!
答案 0 :(得分:25)
以下是您正在寻找的答案 [LINK],总结一下:
您可以轻松删除高亮边框(元素聚焦时出现的边框)或使用CSS在WebView中更改它的颜色!特定于WebKit的属性“-webkit-tap-highlight-color”正是您所需要的。
以下行将完全在页面上禁用它:
{
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
rgba()
与rgb()
类似,但不透明度需要第4个参数。我相信这可能适用于iPhone WebView,因为Chrome和Safari都基于WebKit。
这是CSS,因此您可以将其放在外部样式表中,或者放在带有样式标记的HTML页面内。
另一个更精细的方法,取自链接的commen部分:
{
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
:focus {
outline: 0;
border:none;
color: rgba(0, 0, 0, 0);
}
答案 1 :(得分:2)
虽然@ g00dy解决方案在大多数情况下都有效,但是有些Android版本还不够。我尝试了本帖和其他帖子中提到的所有属性,但没有...
在这种情况下,唯一有效的方法是使用属性:
-webkit-user-modify: read-write-plaintext-only;
不好的一面是,它允许用户编辑webview,它可以显示键盘甚至让用户在webview上书写。
简而言之,经过漫长的一天寻找解决方案之后,在所有设备和版本中唯一适合我的方法是使用被引用的属性,然后在webview上处理点击。
这是一个丑陋的解决方法:
在html中,我使用div来包装空洞代码,并为click事件添加了一个函数:
<html>
<head>...</head>
<body>
<div id="background">...content...</div>
</body>
<script type="text/javascript">
window.onload = function(){
var background = document.getElementById("background");
background.addEventListener("click",backgroundClick,false);
function backgroundClick(e) {
console.log("whatever");
window.location.href="ftp://"; //some protocolor (dummy url)
}
}
</script>
</html>
然后我们可以从Android覆盖Url加载(或控制台日志),如下所示:
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
someView.requestFocus();
//do something else if needed
return true; //or false if you want the webview to process the url loading
}
});
如果我们将焦点从webview更改为另一个不可编辑的元素,则不显示键盘,效果是所需的。
这不是一个好的解决方案,但它是最终为我工作的唯一解决方案。
当然,所有这一切都假设你需要其他触摸事件才能工作(捏缩放,滚动,点击......)。如果没有,在webview上覆盖onTouch事件并且什么都不做就足够了。
我希望这有助于某人。 问候。
修改强> 我注意到你调用&#34; backgroundClick()&#34; js函数禁用高亮效果甚至删除css属性而不处理来自Android的click事件。因此,如果您不需要对事件执行某些操作,则可以忽略该部分,只需将de eventListener添加到后台并执行任何操作:
<html>
<head>...</head>
<body>
<div id="background">...content...</div>
</body>
<script type="text/javascript">
window.onload = function(){
var background = document.getElementById("background");
background.addEventListener("click",backgroundClick,false);
function backgroundClick(e) {
//nothing
}
}
</script>
</html>