Есть ли способ передать результат localstorage: getItem () в активность из веб-просмотра - PullRequest
0 голосов
/ 04 апреля 2019

Я использую веб-просмотр, чтобы загрузить страницу в Android.Как только страница загружена, локальное хранилище обновляется.Я хочу получить данные из него.Выше kitkat, используяvaluJavascript, могу получить данные.Это обратный звонок.Проблема в версиях ниже kitkat, где я должен использовать loadUrl () для него.

loadUrl("javascript:localStorage.getItem('"+ key +"')");

Я хочу передать значение, возвращаемое функцией getItem (), для вызова действия.

1 Ответ

0 голосов
/ 04 апреля 2019

вы можете сделать это.Во-первых, вам нужно добавить интерфейс javascript к вашему веб-представлению следующим образом.Допустим, вы загружаете url в каком-то действии под названием FormDetailActivity:

final FormBridge formBridge = new FormBridge(FormDetailActivity.this);
mWebView.addJavascriptInterface(formBridge, "Android");

formBridge - это экземпляр класса, в котором записаны все методы, вызываемые из js.

public class FormBridge extends Activity {


private static final String TAG = "FormBridge";

Context mContext;


private FormDetailActivity mFormActivity;



/**
 * Instantiate the interface and set the context
 */
public FormBridge(Context c) {
    mContext = c;

    mFormActivity = (FormDetailActivity) mContext;

}



@JavascriptInterface
public String getLocalStorageFromJs(String someStringFromJs) {
    //here you'll get the string from js
}
}

И чтобы передать ключ из java в ваш js, вам нужно создать метод в js, принимающий параметр ключа, а затем вы можете вызвать его следующим образом:

mWebView.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
               view.loadUrl("javascript:getStringFromLocalStorage('"+key+"')");

                }
            });

И затем вызвать этот метод из вашего js как:

function getStringFromLocalStorage(key){
   Android.getLocalStorageFromJs(localStorage.getItem(key));
}
...