Получить переменную 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 для вашего требования вы можете найти источник, это тоже