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,並使用提供的名稱。 這可讓 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 屬性授權中所述的詞彙使用。