我正在使用JS脚本从网页中获取一些数据。我加载了包含JS代码的字符串。
然后我在我的WebView中加载此代码。
private static final String SCRAPE_SOME_DATA = "javascript:(function(){" +
"var myJson;" +
"var scrs = document.getElementsByTagName('script');" +
"for(var i=0;i<scrs.length;i++) {" +
"try {" +
"if(Boolean(scrs[i].innerHTML) && scrs[i].innerHTML.startsWith('userLayer')) {" +
"var al = scrs[i].innerHTML;" +
"var s = al.indexOf('[');" +
"if(s>-1) {" +
"var e = al.indexOf('];', s+2);" +
"myJson = al.substring(s,e+1);" +
"}" +
"break;" +
"}" +
"} catch (e) {" +
"}" +
"}" +
"if(Boolean(myJson)) {" +
"window." + SCRAPER + ".setUserLayer(myJson)" +
"}" +
"})();";
然后我在我的WebView中加载此代码。
webView.loadUrl(BookingScraper.SCRAPE_SOME_DATA);
网页包含许多标签 'script',我只需要其中一个标签,它的名称是 userLayer。我从这个标签中获取数据并将其转换为字符串,然后使用 @JavascriptInterface 将得到的字符串传递给我的 Java 方法。
@JavascriptInterface
public void setUserLayer(String userLayer) {
if (userLayer != null) {
try {
Log.d("logs", userLayer);
} catch (JSONException exception) {
Crashlytics.log(dataLayer);
Crashlytics.logException(exception);
}
}
}
问题在于,对于安卓5.0和5.1版本不起作用,但对于其他版本来说是正常的。我调试了我的JS代码并发现问题出现在下面这段代码中:
scrs[i].innerHTML.startsWith('dataLayer')
JS抛出异常TypeError: Undefined is not a function。我不知道为什么?为什么它适用于其他Android操作系统版本?
注意: 我已经启用了
webView.addJavascriptInterface(myScrapper, Mycraper.MY_SCRAPER);
webView.getSettings().setDomStorageEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new BookingWebViewClient());
}