我写了一个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,以便在该textarea中编写内容,如下面的代码所示。
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 字符,但只会将 6267 字符插入网页的textarea。
我有什么遗失的吗?
答案 0 :(得分:0)
我尝试仅使用HTML + JavaScript来解决您的问题。请参阅this fiddle。
如您所见,这是正常的。所以,我认为问题可能在于替换转义序列字符。看到您正在循环中更改转义序列字符,这将增加描述变量的大小。但是,totalChars的大小是先前存储的描述大小。因此,稍后当你应用“bStart&lt; = totalChars”条件时,它将计数到只有totalChars(即已经小于当前大小)。
总结,你的描述有太多的转义序列字符“可能”会产生这个问题。所以,先替换整个字符串&amp;然后将子串添加到javaScript中。
如果还有其他问题,这可能会也可能不会解决您的问题。所以,如果我错了,请纠正我。
谢谢。