WebView陷入三星Galaxy S3(Android 4.1.1)上的只读空TEXTAREA

时间:2013-03-21 09:54:01

标签: android webview textarea readonly

我发现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);

    }
}

1 个答案:

答案 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 = '';
        }
    }
}