Получить переменную JavaScript в веб-представлении в Android

Я работаю над проектом электронного обучения, используя SCROM APIs, но теперь я застрял в одном моменте: как получить значение JavaScript на стороне сервера в моей основной деятельности Android в WEBVIEW из scrom API?

Я пытаюсь ниже код:

 public class MyJavaScriptInterface   
    {  Context mContext;

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


    /** retrieve the ids */
    public void getbookmark(final String bookmarkId) {

        webView.loadUrl("javascript:Android.getbookmark(BOOKMARKED_PAGE);");
        //getWindow().requestFeature();


    }

        @SuppressWarnings("unused")  
        public void showHTML(String html)  
        {  
           new AlertDialog.Builder(myApp)  
                .setTitle("HTML")  
                .setMessage(html)  
                .setPositiveButton(android.R.string.ok, null)  
            .setCancelable(false)  
            .create()  
            .show(); 
        }  
    }  

Должен ли я принять значение onpagefinished() функция WebView?

2 ответа

Вы хотите добавить интерфейс JavaScript:

mWebView.addJavascriptInterface(new MyJavaScriptInterface(getApplicationContent(), "JSInterface");

Добавьте метод в свой интерфейс, который вы хотите вызвать, и убедитесь, что у вас есть аннотация @JavascriptInterface, чтобы Android сделал ее вызываемой:

@JavascriptInterface
public void showHTML(String html)  
{  
   new AlertDialog.Builder(myApp)  
        .setTitle("HTML")  
        .setMessage(html)  
        .setPositiveButton(android.R.string.ok, null)  
    .setCancelable(false)  
    .create()  
    .show(); 
} 

Затем следуйте подходу, который вы используете в момент вызова метода в javascript:

webView.loadUrl("javascript:Android.getbookmark(BOOKMARKED_PAGE);");

И метод javascript будет выглядеть примерно так:

window.Android.getbookmark = function(variable) {
    var returnValue = getSomeValue(variable);

    if(!window.JSInterface) {
        console.error('window.JSInterface not defined - Did you inject the javascript interface in the native app?');
    }

    window.JSInterface.showHTML(returnValue);
};

Обратите внимание на причину, по которой у нас есть window.JSInterface, потому что мы добавили его с таким именем в:

mWebView.addJavascriptInterface(new MyJavaScriptInterface(getApplicationContent(), "JSInterface");

ПРИМЕЧАНИЕ. В KitKat более эффективно использовать методубследование (), чем loadUrl, простейшая форма, показанная ниже, позволяет передавать обратный вызов для получения возвращаемого значения (демонстрация в примере кода).

webView.evaluateJavascript("Android.getbookmark(BOOKMARKED_PAGE);", null);

Здесь представлен полный пример интерфейса JS, который включает новые API в KitKat: https://github.com/GoogleChrome/chromium-webview-samples

Вы можете использовать Javascript Bridge для вашего требования вы можете найти источник, это тоже

Другие вопросы по тегам