0

我有一个简单的 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 循环崩溃了。为什么是这样??

4

1 回答 1

0

NodeList是一个JavaScript类,但只是一个Java接口。JavaScript您应该创建一个将列表转换为字符串数组的方法,然后您可以将其传递给您的JavaScriptInterface方法。

这个 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)

于 2013-05-13T16:12:04.683 回答