Android SL4A: как сделать ссылки на относительные скрипты в приложении HTML / javascript? - PullRequest
3 голосов
/ 14 ноября 2011

ОК, поэтому я попробовал три метода, чтобы иметь возможность добавлять внешние файлы JavaScript и CSS в мое приложение SL4A.Я использую 2.3 Gingerbread (cyanogenmod с приложениями Google) на ZTE Racer от 3UK и использую SL4A r4 с android python 2.6.2 (при необходимости).

Во-первых, я предполагал, что относительные ссылки будут работать:

<!-- GUI.html - loaded directly within SL4A UI. -->
<script type="text/javascript" src="jquery.js"></script>

Это не так - относительные скрипты и стили не загружаются.

Затем я попытался передать абсолютный путь из скрипта загрузки Python, используя событие:

# script.py - launched in order to load window.
import android, sys, time
droid = android.Android()

path = "file://" + sys.path[0]
droid.webViewShow(path + "/GUI.html")
droid.eventPost('globalAppPath', path + "/")

# sleep for a bit to allow webview to load the DOM and read the event.
time.sleep(10)

и следующий код в встроенном скрипте в конце тега body в GUI.html:

  // (inlined jquery to be able to append to a debug div easily.)
  var droid = new Android();
  var event = droid.eventWait('globalAppPath');
  $('#loading').append("<br/>" + JSON.stringify(event));

однако, это происходит сбой, так как событие не имеет свойства 'result',только свойство 'error' (некоторые исключения Java:

org.json.JSONException: Value globalAppPath at 0 of type java.lang.String cannot be converted to int

строка пути из python не может быть преобразована в распакованный int ?!).

Наконец, я попытался использовать document.URL согласно этому вопросу примерно так:

  // (inlined jquery to be able to append to a debug div easily.)
  $('#loading').append("<br/>" + document.URL);

Однако, это просто возвращает путь:

file:///mnt/sdcard/sl4a/scripts/

, хотя на самом делеправильный путь должен был быть

file:///mnt/sdcard/sl4a/scripts/run-app/GUI.html

Возможно, именно этот неправильный путьВо-первых, ch вызывает сбои - если относительные скрипты ищут в родительском каталоге, что бы объяснить вещи.Тем не менее, это явно ненадежно, когда распространяется в виде APK среди реализаций Android разных производителей - я не могу полагаться на какие-либо предположения о том, как SL4A инициализирует пути для URL-адресов веб-просмотра - я бы предпочел использовать более динамичный и правильный Pythonsys.path[0], если бы я только мог как-то сообщить результат веб-просмотру!

Я бы посчитал каждый из этих отказов по отдельности ошибкой, но все три вместе просто удручают!Я бы предпочел использовать этот фреймворк, а не возвращаться к Titanium, так как он дает мне возможность перейти на python, когда дела идут плохо, и вы не хотите, чтобы ваш пользовательский интерфейс javascript зависал, но если я не могу структурироватьмой код в разных файлах Я собираюсь испытать трудности с использованием возможности редактирования по телефону SL4A со встроенным jquery в каждом отдельном кодовом файле ...

Есть ли способ сделатьэто на самом деле работает?Кто-нибудь получил приложение HTML5 / javascript на Android с SL4A?

1 Ответ

2 голосов
/ 15 ноября 2011

Ответ на этот вопрос просто RTFM -

droid.eventWait()

принимает один необязательный целочисленный параметр - количество секунд ожидания любого события.

droid.eventWaitFor()

с другой стороны, позволяет фильтровать тип события со строкой в ​​(обязательном) первом аргументе.

Все детали здесь .

мой плохой.

...