0

読み取り専用で空の TEXTAREA をタップしてフォーカスしようとすると、Android Webview が動かなくなることがわかりました。キーボードが表示され、もちろん 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);

    }
}
4

1 に答える 1

0

さまざまな選択肢を半日かけて調べた後、解決策を見つけました。

解決策は非常に単純で、TEXTAREA html タグの間にスペースを挿入することでした。

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

また、JS を介して属性を空白文字列に設定する.innerTextと、TEXTAREA によって Webview Freeze が発生することも確認しました。

そのスペースも必要です。これがないと、ブラウザは、TEXTAREA が後に続くすべての HTML も TEXTAREA 内に属すると見なします。したがって、正しい方法は、単一のスペースを指定してから TEXTAREA ( </TEXTAREA>)を完成させることです。

書き込み可能な TEXTAREA HTML 要素の場合、この空のスペースを使用することはできません。または、ユーザーが入力した値が前に付けられます。そのため、WebView に設定する前に、注入する必要のある値を空にする JS メソッドを作成する必要がありました。

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 に答える