我发现Android Webview在我尝试使用并专注于只读且空的TEXTAREA时会卡住。键盘出现,当然不会在TEXTAREA中输入任何内容,但之后WebView卡住了。
我只能使用“BACK”键强制关闭键盘但不执行其他操作。除重启整个应用程序外无法执行任何操作。
<textarea rows="3" id="abcd" readonly="readonly" name="abcd"></textarea>
我一直在针对webview的LOGCAT控制台中获取此详细消息。
singleCursorHandlerTouchEVent ~getEditableSupport FASLE
这仅在运行Android 4.1.1的Samsung S3设备上发生,并且在Samsung Nexus S(Android 4.1.2)和4.1.2 Android模拟器上运行良好。
这些链接中提出的其他解决方案无效
使用此独立Webview示例
可以轻松复制此问题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 :(得分:0)
在花了半天时间查看各种替代方案后,我找到了解决方案。
解决方案非常简单,就是在TEXTAREA html标签之间引入一个空格。
<textarea rows="3" id="abcd" readonly="readonly" name="abcd"> </textarea>
_____________________________________________________________||___________
________________________________________________INSERTED___SPACE ___HERE__
我还观察到通过JS将.innerText
属性设置为BLANK字符串也会导致TEXTAREA导致Webview Freeze。
该空间也是必需的,没有它,浏览器假定TEXTAREA后面的所有HTML也属于TEXTAREA。所以正确的方法是给出一个空格,然后完成TEXTAREA(</TEXTAREA>
)
对于Writable 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 = '';
}
}
}