Хорошо, ребята.Что я пытаюсь сделать: у меня есть некоторый бэкэнд-код, написанный на javascript (проект изначально должен был быть веб-приложением), и я добавил интерфейс javascript в мое веб-представление Android, и когда я нажимаюКнопка в моем пользовательском интерфейсе, код JavaScript делает некоторые вещи, а затем вызывает функцию в моем интерфейсе JavaScript, когда это будет сделано ... Код из моего интерфейса JavaScript:
public void onReady() {
backend.loadUrl("javascript:dokus.backend.onLoginStatusChange(Bridge.onLoginStatusChange);");
backend.loadUrl("javascript:dokus.backend.onProjectsChange(Bridge.onProjectsChange);");
backend.loadUrl("javascript:dokus.backend.onLatestEntriesChange(Bridge.onLatestEntriesChange);");
}
public void onLoginStatusChange (boolean loggedIn, String error) {
Toast.makeText(mainActivity, "LoginStatusChange", Toast.LENGTH_SHORT).show();
}
...
Я уже убедился, чтоФункция onReady вызывается, так что это не проблема.Функция javascript, которая вызывает onLoginStatusChange, выглядит следующим образом:
function _login_callback(loggedIn, msg) {
if (loggedIn) {
_get_projects();
_get_latest_entries();
}
console.log(_login_status_changed_callback);
if (_login_status_changed_callback !== undefined)
_login_status_changed_callback (loggedIn, msg);
}
Я получаю следующую ошибку: «Строка: 180, ошибка типа».Это все, что я получаю от своей функции WebChromeView, которая печатает все от console.log () до сообщения toast.
console.log (_login_status_changed_callback) выводит следующее:
function onLoginStatusChange () {
[native code]
}
Я проверил, что в функцию вызваны правильные аргументы (bool и строка), так что это тоже не должно быть ошибкой ... Я в растерянности, что мне делать?
код настройки для просмотра в Интернете:
private void setupBackend () {
final DokusActivity that = this;
backend = new WebView(this);
BackendBridge.getInstance().initInstance(this, backend);
backend.getSettings().setJavaScriptEnabled(true);
backend.getSettings().setDomStorageEnabled(true);
backend.addJavascriptInterface(BackendBridge.getInstance(), "Bridge");
backend.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(that, "Oh no! " + description, Toast.LENGTH_SHORT).show();
}
});
backend.setWebChromeClient(new WebChromeClient() {
public boolean onConsoleMessage (ConsoleMessage consoleMessage) {
Toast.makeText(that, "Oh no! " + consoleMessage.lineNumber() + ": " + consoleMessage.message(), Toast.LENGTH_SHORT).show();
return false;
}
});
backend.loadUrl("file:///android_asset/index.html");
}