Подтвердить что ты не робот

Каковы действительные возвращаемые значения для интерфейса Javascript в Android WebView?

У меня есть Android WebView, в котором есть JavaScript, который вызывает методы Android с помощью метода addJavascriptInterface:

myWebview.addJavascriptInterface(new JavascriptBridge(), "Android");

public class JavascriptBridge {

    public String getAString() {          
        return "my_str";
    }
}

Это прекрасно работает. Я хочу вернуть список ints в WebView. Пробовал это:

public class JavascriptBridge {

    public int[] getMyInts() {          
        return new int[]{1,2,3};
    }
}

но вызов этой функции в JS возвращает undefined:

var myInts = Android.getMyInts();

Есть ли список допустимых типов возврата для Android Javascript Interface? Это только примитивы?

4b9b3361

Ответ 1

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

Вы можете использовать JSON (например, строчить и анализировать в Javascript, проверить различные параметры Java на json.org

Ответ 2

Вы можете вернуть что-нибудь, примитивы или объекты. Объекты преобразуются в строки через их метод toString(). Если метод JavascriptInterface возвращает строку JSON (например, объект, который toString() выводит JSON), вы можете непосредственно проанализировать эту строку:

var array = JSON.parse(window.android.getSomeJsonThing());

Ответ 3

Ненавижу говорить об этом, но команда "google" действительно привлекла нас этим.

Вот что я знаю о скрытых/недокументированных/неподдерживаемых конверсиях типа JavascriptInterface, которые вы получаете с помощью своего "PAID" FOR (как в абсолютном владении) продукта GOOGLE.

нет var args. попытка вызова результатов в методе не найдена.

вы не можете в общих чертах передавать значения java из javascript, используя java ordinal catch all type: object. соответствие нестандартного типа всегда равно нулю в java-land (это самая тупая ошибка, которую кодер когда-либо преднамеренно написал И.-М.-Х.-ЗНАНИЕ-МЫШЛЕНИЕ).

однако вы можете передавать любые объекты, которые вам нравятся js из java, но js не может использовать методы объекта, где вещи не аннотируются, и никакой доступ к полю объекта не будет успешным; даже через (несуществующее) COURTESY bean getter/setter auto value: map/Proxy.

[это код наци-типа: MAXIMUM, где веб-просмотр похож на концентрационный лагерь; и это не имеет никакого смысла для встроенного устройства без корневых возможностей из коробки, с аппаратными средствами и шифрами промышленного/военного назначения.]

Наконец, вы не можете отправить какой-либо тип javascript-объекта, который я знаю из javascript в java, который включает в себя документ объекта html и его компоненты (я еще не понял?).

для всей тяжелой работы в Google, пытаясь заставить кодеры писать коды для своих приложений, это чистый сбой. Я написал коды, которые могут вызывать общедоступные функции javascript по имени пути и получать результаты (после того, как встроенное отбеливание данных управляет любыми обычно полезными данными).

весь этот патч должен был состоять из класса hack с использованием отражения. вместо того чтобы отключить отражение, чтобы решить проблему, вся платформа веб-разработки была заблокирована. (антиконкурентное, антимонопольное). Мы все знаем, что html и его коллеги - лучшие интерфейсы разработки приложений в мире.

Не зря, если вы попытаетесь достаточно усердно, вы все равно можете добавить ошибку "ошибка" в браузере и создать прокси-серверы, чтобы вы могли наконец-то получить серьезную разработку веб-апплетов, сделав вашу инвестицию в размере 50-500 долларов США.

С моей точки зрения это была хорошо организованная атака на конкурентный продукт. Не проблема безопасности. Все, что нужно было сделать, это написать правильный код, чтобы заблокировать двери от удаленного доступа, и если вы этого не сделали, хорошо, вы получите тот же результат в java-программе, которая загружает плагины. в конечном счете: удовлетворительный пользовательский интерфейс.

Я думаю, что мы все взрослые здесь. Тем не менее, google взял на себя грубую позицию в отношении фактов этого дела и поставил нас всех в детский сад без уважения к нашим вкладам и пожеланиям.

чтобы просто поставить дело, программное обеспечение отключено, поскольку инструменты разработки google ui не могут конкурировать с простотой и гибкостью стандартов HTML с разработкой кода Java.

Возможно, правильное решение для google или какого-либо другого программного обеспечения для выпуска sdk, который предлагает прямой доступ ко всем объектам документа в качестве компонента библиотеки без поддержки javascript (поскольку вы могли использовать носорог Mozilla или некоторые другой java-скриптовый контроллер), тогда как разработчик приложения может принимать и делегировать все риски для использования библиотеки. Блокирование кодовой базы, когда вы не имеете представления об использовании разработчиками или потребностях пользователей, является инфантильным.