Skip to content

Android WebView注入Java对象注意事项

最近写一个APP 想要获取webView中的内容(可能是加载的是url)

所以就在网上查了下, 结果怎么都不行,于是就继续查,看那文章
获得webView中的内容
发现日期比较早了,
考虑到可能版本迭代太快,又换了什么的。深入查询之后找到。。。

在android4.2以前,注入步骤如下:

webview.getSetting().setJavaScriptEnable(true);
class JsObject {
public String toString() { return “injectedObject”; }
}
webView.addJavascriptInterface(new JsObject(), “injectedObject”);

Android4.2及以后,注入步骤如下:

webview.getSetting().setJavaScriptEnable(true);
class JsObject {
@JavascriptInterface
public String toString() { return “injectedObject”; }
}
webView.addJavascriptInterface(new JsObject(), “injectedObject”);

发现区别没?4.2之前向webview注入的对象所暴露的接口toString没有注释语句@JavascriptInterface,而4.2及以后的则多了注释语句@JavascriptInterface
经过查官方文档所知,因为这个接口允许JavaScript 控制宿主应用程序,这是个很强大的特性,但同时,在4.2的版本前存在重大安全隐患,因为JavaScript 可以使用反射访问注入webview的java对象的public fields,在一个包含不信任内容的WebView中使用这个方法,会允许攻击者去篡改宿主应用程序,使用宿主应用程序的权限执行java代码。因此4.2以后,任何为JS暴露的接口,都需要加

@JavascriptInterface
注释,这样,这个Java对象的fields 将不允许被JS访问。

在这里 真心吐槽 android 升级的各种调整。。。 感觉跟不上节奏

发表评论

电子邮件地址不会被公开。 必填项已用*标注