alexjet73
@alexjet73

Как обезопасить методы JavascriptInterface отслеживая URL WebView?

Есть класс JavascriptInterface для взаимодействия JS в WebView и Java android.
Класс
class JavaScriptInterface {
Context mContext;
WebView mW;
JavaScriptInterface(Context c,WebView w) {
    mContext = c;
    mW = w;
}
@JavascriptInterface
public void saveJson(String json) {
    if(mW.getUrl().indexOf("file:///android_asset/") == 0){
        if(mContext instanceof MainActivity)
            ((MainActivity)mContext).saveFL(json);
    }
}
@JavascriptInterface
public String loadJson() {
    if(mW.getUrl().indexOf("file:///android_asset/") == 0){
        if(mContext instanceof MainActivity)
           return ((MainActivity)mContext).loadFL();
    }
    return "[]";
}

И в целях безопасности, вызов методов из класса JavascriptInterface хочется сделать только если URL соответствует внутренним ресурсам. Но реализация выше выдает ошибку на строке с mW.getUrl:
A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread.

Как можно передать в методы JavascriptInterface текущий URL в WebView? Или может есть вариант лучше сделать проверку, чтобы эти функции нельзя была запустить на других сайтах?
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Я бы посмотрел в сторону добавления/удаления JavascriptInterface где-нибудь в районе WebViewClient::onPageStarted.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы