【问题标题】:HTML TextArea Characters Limit Inside Android WebViewAndroid WebView内的HTML TextArea字符限制
【发布时间】:2011-02-15 10:22:19
【问题描述】:

我编写了一个 HTML 页面,其中包含以下代码。

<div id="adsListContainer" style="margin: 5px;">
    <textarea id="txtDesc" rows="20" cols="50"></textarea>
    <br />
    <input id="txtCounts" value="0" size="8" />
    <input type="button" value="Count" onclick="countChars()" />
</div>

上面的 html 包含在一个名为 test.html 的文件中,并显示在 android 的 WebView 控件中。现在使用 Java 和 WebView 的 loadURL() 函数,我正在执行 javascript,以便按照以下代码在该文本区域中编写一些内容。

javascript:document.getElementsByTagName("textarea")[0].value += 'anything goes here of not more than 50 chars';void(0);

即使上面的代码有效并且我多次调用它,所以我可能会在这个 textarea 元素中插入 7000 多个字符。

负责执行 Javascript 以将文本 (HTML) 插入 textarea 的 Java 代码如下。

int bStart = 0;
int bEnd = 49;
String description = "some huge description including html tags"
int totalChars = description.length() - 1;

while (bStart <= totalChars) {
    if (bEnd > totalChars)
        bEnd = totalChars;

    rv = "javascript:";

    rv += "var tas=document.getElementsByTagName('textarea');"; // description
    rv += "if (tas.length>0) {";
    rv += "var ta=tas[0];";
    rv += "ta.value += '"
           + description.substring(bStart, bEnd)
            .replace("'", "\\'").replace('"', '\"') + "';"; // description
    rv += "}";

    webView.loadUrl(rv + "void(0);");

    bStart += 50;
    bEnd += 50;
}

虽然上面的代码可以工作,但并不完美。描述有 7245 个字符,但它只在网页的 textarea 中插入 6267 个字符。

我有什么遗漏吗?

【问题讨论】:

  • 我希望这个语法 {document.getElementsByTagName('textarea')} 代替 {document.getElementsByTagName('textarea')[0]} 在这里没有任何错误。请澄清。
  • 是的,这工作正常。 TextArea 完美地填充了简单的文本,但是当它用 HTML 填充时它会中断

标签: java javascript android html webview


【解决方案1】:

我已尝试仅使用 HTML + JavaScript 应用您的问题。请参阅this fiddle

如您所见,这工作正常。所以,我认为问题可能在于替换转义序列字符。看到您正在从循环中更改转义序列字符,这将增加描述变量的大小。但是,totalChars 的大小是先前存储的描述大小。因此,稍后当您应用“bStart

最后,您的描述中有太多转义序列字符“可能”会产生此问题。因此,请先替换整个字符串,然后将子字符串添加到您的 javaScript。

如果还有其他问题,这可能会也可能不会解决您的问题。所以,如果我错了,请纠正我。

谢谢。

【讨论】:

  • 好电话!我在您的回答后进行了实验,发现这些是破坏它的特殊字符。请参阅我的这篇文章goo.gl/jRgMS 我发现唯一破坏它的字符是“\n”,我需要用“\\n”替换它,对吗?还有其他我需要替换的字符吗?
  • 不!您需要将其替换为
猜你喜欢
  • 1970-01-01
  • 2016-12-16
  • 2011-06-02
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多