删除webview的焦点叠加颜色

时间:2013-06-28 08:31:36

标签: android webview focus

我有一个加载网站的WebView,一旦我按下该网站的某些元素,WebView就会在按下的元素上放置某种蓝色叠加层。

无论如何都要删除此行为?

提前致谢!

2 个答案:

答案 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>