共用方式為


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,並使用提供的名稱。 這可讓 Java 物件的方法從 JavaScript 存取。 針對以 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.os.Build.VERSION_CODES#JELLY_BEAN 為目標的應用程式仍然容易受到攻擊。 使用此方法的最安全方式是以 為目標 android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 ,並確保只有在Android 4.2或更新版本上執行時才會呼叫 方法。 使用這些舊版,JavaScript 可以使用反映來存取插入物件的公用字段。 在包含不受信任內容的 WebView 中使用此方法,可能會讓攻擊者以非預期的方式操作主應用程式,並利用主應用程式的許可權執行 Java 程式代碼。 在 WebView 中使用此方法時,請使用極端小心,其中可能包含不受信任的內容。</li li><> JavaScript 會在此 WebView 的私人背景線程上與 Java 物件互動。 因此,維護線程安全性需要謹慎。 </li li><> 因為物件公開到所有框架,所以任何框架都可以取得物件名稱並呼叫方法。 無法從應用程式端告訴呼叫框架的來源,因此應用程式不得假設呼叫端是值得信任的,除非應用程式可以保證即使 iframe 內也從未將第三方內容載入 WebView 中。</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 屬性授權中所述的詞彙使用。

適用於