WebView.AddJavascriptInterface(Object, String) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将提供的 Java 对象注入此 WebView。
[Android.Runtime.Register("addJavascriptInterface", "(Ljava/lang/Object;Ljava/lang/String;)V", "GetAddJavascriptInterface_Ljava_lang_Object_Ljava_lang_String_Handler")]
public virtual void AddJavascriptInterface (Java.Lang.Object object, string name);
[<Android.Runtime.Register("addJavascriptInterface", "(Ljava/lang/Object;Ljava/lang/String;)V", "GetAddJavascriptInterface_Ljava_lang_Object_Ljava_lang_String_Handler")>]
abstract member AddJavascriptInterface : Java.Lang.Object * string -> unit
override this.AddJavascriptInterface : Java.Lang.Object * string -> unit
参数
- object
- Object
要注入到此 WebView JavaScript 上下文中的 Java 对象。 null
值将被忽略。
- name
- String
用于在 JavaScript 中公开对象的名称
- 属性
注解
将提供的 Java 对象注入此 WebView。 该对象使用提供的名称注入网页的所有帧,包括所有 iframe。 这允许从 JavaScript 访问 Java 对象的方法。 对于面向 API 级别及更高级别的 android.os.Build.VERSION_CODES#JELLY_BEAN_MR1
应用程序,只能从 JavaScript 访问带注释 android.webkit.JavascriptInterface
的公共方法。 对于面向 API 级别或更低级别的 android.os.Build.VERSION_CODES#JELLY_BEAN
应用程序,可以访问所有公共方法(包括继承的方法),请参阅下面的重要安全说明以了解影响。
请注意,在下次加载页面之前,注入的对象不会显示在 JavaScript 中。 应在注入对象之前启用 JavaScript。 例如:
class JsObject {
{@literal @}JavascriptInterface
public String toString() { return "injectedObject"; }
}
webview.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JsObject(), "injectedObject");
webView.loadData("<!DOCTYPE html><title></title>", "text/html", null);
webView.loadUrl("javascript:alert(injectedObject.toString())");
<strong IMPORTANT:</strong><>ul><li> 此方法可用于允许 JavaScript 控制主机应用程序。 这是一项强大的功能,但也为面向 android.os.Build.VERSION_CODES#JELLY_BEAN
或更早的应用带来了安全风险。 如果应用在低于 4.2 的运行 Android 的设备上运行,则面向版本晚 android.os.Build.VERSION_CODES#JELLY_BEAN
于版本的应用仍然易受攻击。 使用此方法的最安全方法是设定目标 android.os.Build.VERSION_CODES#JELLY_BEAN_MR1
,并确保仅在 Android 4.2 或更高版本上运行时调用该方法。 使用这些旧版本,JavaScript 可以使用反射来访问注入对象的公共字段。 在包含不受信任的内容的 WebView 中使用此方法可能允许攻击者以意外的方式操作主机应用程序,使用主机应用程序的权限执行 Java 代码。 在可能包含不受信任的内容的 WebView 中使用此方法时,请使用极其谨慎。</li><JavaScript> 与此 WebView 的专用后台线程上的 Java 对象交互。 因此,需要注意维护线程安全性。 </li li><> 由于对象公开给所有帧,因此任何帧都可以获取对象名称和调用方法。 无法从应用端告诉调用帧的起源,因此应用不得假定调用方是可信的,除非应用可以保证任何第三方内容都从未加载到 WebView 中,即使在 iframe 中也是如此。</li li><> Java 对象的字段不可访问。</li li>>< 对于面向 API 级别及更高级别的android.os.Build.VERSION_CODES#LOLLIPOP
应用程序,注入的 Java 对象的方法可从 JavaScript 枚举。</li></ul>
适用于 . 的 android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String)
Java 文档
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。