2013-06-28 4 views
10

У меня есть WebView, который загружает сайт, как только я нажимаю некоторые из моих элементов этого сайта, WebView помещает какой-то синий наложение поверх нажатого элемента.Удалить фокус наложения-цвета webview

Следует ли как можно скорее удалить это поведение?

Заранее благодарен!

ответ

25

Вот ответ, который вы ищете [LINK], чтобы резюмировать:

Вы можете легко удалить границу выделения (граница, которая появляется, когда элемент ориентирован) или изменить его цвет в WebView с помощью CSS ! Свойство 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); 
} 
+0

спасибо за помощь :) – Inx

+0

Always Wellcome ;-) – g00dy

+1

Rather чем сделать цвет черным и установить альфа на 0. вы могли бы использовать '-webkit-tap-highlight-color: transparent;' [doc] (https://developer.mozilla.org/en-US/docs/Web/ CSS/-webkit-tap-highlight-color) – venkatvb

2

Хотя @ g00dy решение работает в большинстве случаев, есть некоторые Android версии, в которых это не достаточно. Я перепробовал все свойства, упомянутые в этом и другие сообщения, но ничего ...

В этих случаях единственный подход, который всегда работает использует свойство:

-webkit-user-modify: read-write-plaintext-only; 

Плохая сторона является то, что она позволяет пользователь, чтобы отредактировать веб-просмотр, и он может отображать клавиатуру и даже позволить пользователю писать через веб-просмотр.

Короче говоря, после долгого дня поиска решений, единственный, который работал для меня на всех устройствах и в версиях, использовал указанное свойство, а затем обрабатывал щелчок по веб-просмотру.

Это некрасиво обходной путь:

В HTML я использовал DIV, чтобы обернуть код отверстие и добавил функцию на событие щелчка:

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

Тогда мы можем переопределить загрузку URL (или логарифм консоль) из Android следующим образом:

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 на другой элемент не редактируется, клавиатура не отображается и эффект де .

Это нехорошее решение, но это единственное, что, наконец, сработало для меня.

Конечно, все это предполагает, что вам нужны другие события касания для работы (щепотка, прокрутка, щелчок ...).Если нет, переопределить событие onTouch над веб-просмотром и ничего не делать было бы достаточно.

Надеюсь, это поможет кому-то. С уважением.

Edit: Я заметил, что тот факт, что вы называете «backgroundClick()» Js функции отключает эффект изюминки даже удаляя свойство CSS, а не обработки события щелчка от Android. Так что, если вам не нужно что-то делать с событием вы можете игнорировать эту часть и просто добавить де 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> 
+0

Просто идея, вы могли бы использовать 'pointer-events: none' [doc] (https://developer.mozilla.org/en/docs/Web/CSS/pointer -events) вместо того, чтобы переопределять onclick. – venkatvb

Смежные вопросы