對於我的android應用程序,我使用webview呈現我的網站,並且我創建了一個javscriptinterface對象來與應用程序和網站進行通信。我想讓其他用戶把iframe放到我的網站中,但是我想這些iframe是否可以訪問我的JS接口對象?我的網站內的iframe可以訪問webview-js橋對象嗎?
如果可能的話如何解決這個安全問題?
對於我的android應用程序,我使用webview呈現我的網站,並且我創建了一個javscriptinterface對象來與應用程序和網站進行通信。我想讓其他用戶把iframe放到我的網站中,但是我想這些iframe是否可以訪問我的JS接口對象?我的網站內的iframe可以訪問webview-js橋對象嗎?
如果可能的話如何解決這個安全問題?
是 - WebView中的所有JavaScript都可以訪問相同的JavaScript接口,無論它來自哪個服務器,因爲它在本地執行。
您可以通過在本地網絡上的不同端口上運行兩個Python SimpleHTTPServer實例來測試它們:它們被認爲是不同的主機(例如XMLHttpRequest會導致交叉源請求錯誤),但仍可以調用方法即使你的iframe來自不同的主機,Javascript也是如此。
到目前爲止,我還沒有能夠找到一種方法來規避這種情況。 Android docs建議「只將addJavaScriptInterface()暴露給應用程序APK中包含的JavaScript」,但沒有提及如何實現此目的。由於Java對象被傳遞給Javascript,並且所有的Javascript都是在WebView的上下文中執行的,我猜想這是由WebView/WebViewProvider的Android實現來提供這樣一種方法,但是Marshmallow的就Java框架而言,addJavascriptInterface()是空的(請參閱WebView.java和WebViewProvider.java)。它沒有use to be,所以也許這就是安全文檔的來源。