2010-11-16 77 views
4

我正在編寫一個小型的Web應用程序,它大量使用canvas元素來做類似於VNC的事情。它特別針對iOS和Android的默認瀏覽器。如何獲取移動瀏覽器(iOS中的webkit,Android)顯示其軟鍵盤

當需要鍵盤輸入時,我可以通過AJAX調用檢測到,但我無法說服移動瀏覽器按需顯示其軟鍵盤。我的想法是有一個輸入字段,可能隱藏在畫布後面,我可以在適當時關注焦點,然後在該輸入字段上監聽關鍵事件。

問題在於,當它來自「背景」時,即在AJAX調用的成功處理程序上時,它似乎不起作用。這裏是一個自包含的測試用例(需要jQuery,並使用安裝在/focus上的虛擬ajax處理程序),它顯示了延遲時間或返回時的焦點不會彈出移動瀏覽器的鍵盤AJAX呼叫。有什麼辦法讓鍵盤有效地彈出嗎?

<html> 
<head> 
<title>Focus Test V1</title> 
</head> 
<script type="text/javascript" src="jquery.js"></script> 
<body> 

<div> 
<form method="GET" onsubmit='return false;'> 
<input type="text" id="kb" /> 
</form> 
</div> 

<div> 
<button id="focus-direct">Focus Directly</button> 
<button id="focus-timeout"">Focus Timeout</button> 
<button id="focus-ajax">Focus Ajax</button> 
<button id="clear">Clear</button> 
</div> 

<div id="console"></div> 

<script type="text/javascript"> 
    function init() { 
     function append(text) { 
      $('<div/>').text(text).appendTo('#console'); 
     } 
     $('#clear').click(function() { 
      $('#console').html(""); 
     }); 
     $('#focus-direct').click(function() { 
      focusKB(); 
     }); 
     $('#focus-timeout').click(function() { 
      setTimeout(focusKB(), 50); 
     }); 
     $('#focus-ajax').click(function() { 
      append("sending..."); 
      $.ajax({ 
       url : '/focus', 
       success : function() { 
        append("ajax returned..."); 
        focusKB(); 
       } 
      }); 
     }); 

     function focusKB() { 
      $('#kb').focus(); 
      append("focusing..."); 
     } 

     setTimeout(focusKB, 3000); 
    } 
    $(document).ready(init); 
</script> 

</body> 
</html> 

回答

2

不幸的是,在大多數情況下,系統會測試用戶是否觸發事件(例如點擊)來顯示軟件鍵盤。這使得無法按需顯示軟鍵盤。

+1

這就是我的實驗似乎暗示,但我希望有一個很好的伎倆來解決這個問題。 – CarlG 2010-11-17 17:29:40

相關問題