0

我观察到,当我尝试进入并专注于只读且为空的 TEXTAREA 时,Android Webview 会卡住。键盘出现,当然不会在 TEXTAREA 中输入任何内容,但之后 WebView 被卡住了。

我只能使用“BACK”键强制关闭键盘,但没有执行其他操作。除了重新启动整个应用程序之外,什么也做不了。

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

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

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

    }
}
4

1 回答 1

0

在花了半天时间寻找各种替代方案后,我找到了解决方案。

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

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

而且我还观察到.innerText通过 JS 将属性设置为 BLANK 字符串也会导致 TEXTAREA 导致 Webview 冻结。

该空间也是必需的,否则浏览器假定所有 HTML 后跟 TEXTAREA 也属于 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 = '';
        }
    }
}
于 2013-03-21T09:54:01.290 回答