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
Объект Java для внедрения в контекст JavaScript webView. null
значения игнорируются.
- name
- String
имя, используемое для предоставления объекта в JavaScript
- Атрибуты
Комментарии
Внедряет предоставленный объект Java в этот WebView. Объект внедряется во все кадры веб-страницы, включая все iframes, используя указанное имя. Это позволяет получить доступ к методам объекта Java из JavaScript. Для приложений, предназначенных для уровня API и более поздних версий android.os.Build.VERSION_CODES#JELLY_BEAN_MR1
, доступ к ним можно получить только android.webkit.JavascriptInterface
из JavaScript. Для приложений, предназначенных для уровня android.os.Build.VERSION_CODES#JELLY_BEAN
API или ниже, доступ к всем общедоступным методам (включая унаследованные) можно получить, см. важное примечание по безопасности ниже.
Обратите внимание, что внедренные объекты не будут отображаться в 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
приложений или более ранних версий. Приложения, предназначенные для более поздней версии, чем android.os.Build.VERSION_CODES#JELLY_BEAN
по-прежнему уязвимы, если приложение работает на устройстве под управлением Android до версии 4.2. Наиболее безопасным способом использования этого метода является целевой android.os.Build.VERSION_CODES#JELLY_BEAN_MR1
объект и обеспечение вызова метода только при запуске в Android 4.2 или более поздней версии. В этих более старых версиях JavaScript может использовать отражение для доступа к общедоступным полям внедренного объекта. Использование этого метода в WebView, содержащего ненадежное содержимое, может позволить злоумышленнику управлять ведущим приложением непреднамеренные способы, выполняя код Java с разрешениями ведущего приложения. Используйте крайнюю осторожность при использовании этого метода в WebView, который может содержать ненадежное содержимое.</li javaScript><> взаимодействует с объектом Java в частном фоновом потоке этого WebView. Поэтому для поддержания безопасности потоков требуется забота. </li li><>, так как объект предоставляется всем кадрам, любой кадр может получить имя объекта и вызвать методы в нем. Нет способа сообщить источнику вызывающего кадра с стороны приложения, поэтому приложение не должно предполагать, что вызывающий объект является надежным, если приложение не может гарантировать, что никакое стороннее содержимое никогда не загружается в WebView даже внутри iframe.<Поля объекта Java /li><> недоступны.</li li>>< Для приложений, предназначенных для уровня android.os.Build.VERSION_CODES#LOLLIPOP
API и выше, методы внедренных объектов Java можно перечислять из JavaScript.</li></ul>
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.