WebView.AddJavascriptInterface(Object, String) 方法

定义

将提供的 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 属性许可证中所述的术语使用。

适用于