我有一个简单的WebViewClient类,它应该返回我当前所在页面的所有<p>
元素(在webview中)
这是代码
public class SearchClient extends WebViewClient {
class MyJavaScriptInterface {
@SuppressWarnings("unused")
public void processHTML(String[] html) {
Log.w("Length", String.valueOf(html.length));
for(String s : html)
{
Log.w("Row", s.toString());
}
}
}
public SearchClient(WebView wv)
{
wv.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
}
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:window.HTMLOUT.processHTML(document.getElementsByTagName('p'));");
}
}
document.getElementsByTagName
显然是返回元素,因为processHTML函数中的“Log.w”行有超过100个字符串......但for循环崩溃。这是为什么?
答案 0 :(得分:0)
NodeList
是一个JavaScript
类,但只有Java
interface.在JavaScript
中你应该创建一个方法,将列表转换为字符串然后< / strong>您可以将其传递到JavaScriptInterface
方法中。
从this SO question开始,解决方案可能是:
function toArray(obj) {
var array = [];
// iterate backwards ensuring that length is an UInt32
for (var i = obj.length >>> 0; i--;) {
array[i] = obj[i];
}
return array;
}
这也可能会起作用(来自上面链接中的问题),但是没有测试过自己:
Array.prototype.slice.call(list,0)