2013-03-21 66 views
0

我观察到,当我试图挖掘并专注于只读且空的TEXTAREA时,Android Webview卡住了。键盘出现了,当然不会向TEXTAREA输入任何东西,但在此之后WebView卡住了。WebView卡在Samsung Galaxy S3上的只读空TEXTAREA(Android 4.1.1)

我只能使用“返回”键强制关闭键盘,但不执行其他操作。除非重新启动整个应用程序,否则无法执行任何操作

<textarea rows="3" id="abcd" readonly="readonly" name="abcd"></textarea> 

我不断在LOGCAT控制台中针对webview获取此详细消息。

singleCursorHandlerTouchEVent ~getEditableSupport FASLE 

这种情况仅运行Android 4.1.1三星S3设备上完美的作品在三星Nexus S(的Android 4.1.2)和4.1.2 Android模拟器。

其他的解决方案在这些环节提出没有工作

这个问题可以很容易地与这个独立网页视图例如

public class TestWebViewTextStylesActivity extends Activity { 

    WebView mWebView = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     String data = "<html><body>" + 
     "<textarea rows='3' id='abcd' readonly='readonly' name='abcd'></textarea>" + 
     "</body></html>"; 

     mWebView = new WebView(this); 
     setContentView(mWebView); 

     // Set some HTML 
     mWebView.loadDataWithBaseURL("file:///android_asset/", data, "text/html", "UTF-8", null); 

    } 
} 

回答

0

我发现转载之后的解决方案花费半天的时间寻找各种选择。

解决方案非常简单,它是在TEXTAREA html标签之间引入一个空格。

<textarea rows="3" id="abcd" readonly="readonly" name="abcd"> </textarea> 
_____________________________________________________________||___________ 
________________________________________________INSERTED___SPACE ___HERE__ 

而且我还发现,设置.innerText属性通过JS空字符串也使文本区域造成网页视图冻结。

如果没有这个空间,浏览器假定TEXTAREA中的所有HTML后面还包含TEXTAREA所需的空间。所以正确的方法是给一个空格,然后完成TEXTAREA(</TEXTAREA>

对于可写的TEXTAREA HTML元素,您不能拥有这个空白空间,或者它的前缀是用户输入的值。所以我必须编写一个JS方法,它将在将其设置到WebView之前将必须注入的值清空。

function clearOffTextArea(textAreaId) { 

    var x = document.getElementById(textAreaId); 

    var isReadOnly = false; 

    if (x.hasAttribute('readOnly')) { 
     isReadOnly = x.readOnly; 
    } 

    if (isReadOnly == false) { 
     if (customMethodToTrimString(x.innerText) == '') { 
      x.innerText = ''; 
     } 
    } 
}