выполнить код JavaScript в android.webkit.WebView без loadUrl или XHR - PullRequest
1 голос
/ 30 ноября 2011

Я пишу плагин phoneGap, чтобы разрешить мультитач на устройствах Android (надеясь в конечном итоге включить это в phonegap / callback).loadUrl ('javascript: somecodehere ()') call

К сожалению, loadUrl имеет побочный эффект мерцания программной клавиатуры, что неприемлемо для общего решения.

Plugin.success Phonegap.использует внутренний веб-сервер и объект XmlHttpRequest для отправки данных, этот метод слишком медленный.

Есть ли 3-й способ отправки JavaScript в веб-браузер?(или даже отправив удар в движок javascript, чтобы вызвать событие, чтобы событие могло проверить пользовательский объект jsInterface)

Ответы [ 4 ]

0 голосов
/ 21 июля 2012

Кажется, мы разработали нечто подобное

https://github.com/Philzen/webview-multitouch-polyfill

Однако я никогда не сталкивался с проблемой, которую вы описывали ранее, но, возможно, вы хотели бы протестировать на своем устройстве илиМожет быть, внести свой опыт в проект.Это уже было предложено в Cordova (Phonegap) Roadmap , поэтому мы будем рады, если каждый пользователь и / или вкладчик поможет этому делу!

0 голосов
/ 30 ноября 2011

В вашем плагине попробуйте позвонить:

this.ctx.sendJavascript(statement);

Не так быстро, как loadUrl, но это может быть немного быстрее, чем возвращать PluginResult.

0 голосов
/ 03 марта 2012

Вы можете свернуть свою собственную урезанную очередь сообщений с помощью java-объекта, который по сути является массивом и аксессором, а затем использовать addJavascriptInterface, чтобы связать его с контекстом javascript и внедрить цикл опроса javascript, который использует setTimeout для вызова метода доступа твоя очередь Всякий раз, когда вам нужно выполнить JavaScript, просто добавьте его в свой список. Я не уверен, как это будет работать, но, возможно, стоит попробовать?

class JSQueue {
    private ArrayList<String> messages;

    public String getMessage() {
        String message = "";
        if(messages.size() >0) {
            message = messages.remove(0);
        }
        return message;
    }
    public void addMessage(String message) {
        messages.add(message);
    }
}
JSQueue jsq = new JSQueue();
dc.appMobiCanvas.hiddenView.addJavascriptInterface(jsq, "jsq");
dc.appMobiCanvas.hiddenView.loadUrl("javascript:(function checkJSQ(){eval(jsq.getMessage());setTimeout(checkJSQ, 50);}})();");
//add messages via jsq.addMessage();
0 голосов
/ 30 ноября 2011

Взгляните на addJavascriptInterface в классе WebView. Это больше похоже на то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...