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
將 Java 物件注入到這個 WebView 的 JavaScript 上下文中。
null 值會被忽略。
- name
- String
JavaScript 中用來暴露物件的名稱
- 屬性
備註
將所提供的 Java 物件注入此 WebView。 該物件會以所提供的名稱注入網頁的所有框架,包括所有 iframe。 這使得 Java 物件的方法可以從 JavaScript 存取。 針對 API 層 android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 級及以上的應用程式,只有標 android.webkit.JavascriptInterface 註了 JavaScript 的公開方法才能存取。 針對 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>重要:</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><li> JavaScript 與 WebView 的私人背景執行緒中的 Java 物件互動。 因此必須謹慎以維持線程安全。
</li><li> 由於物件暴露於所有框架,任何框架都能取得物件名稱並呼叫該框架的方法。 無法從應用程式端判斷呼叫框架的來源,因此除非應用程式能保證即使在 iframe 內也不會載入第三方內容,否則不應假設呼叫者是可信賴的。</li><li> Java 物件的欄位無法存取。</li><li> 針對 API 層android.os.Build.VERSION_CODES#LOLLIPOP級及以上的應用程式,注入的 Java 物件方法可由 JavaScript 枚舉。</li></ul>
Java 文件 android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String)。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。