Android SL4A: как сделать ссылки на относительные скрипты в приложении HTML/javascript?

Итак, я попробовал три метода, чтобы иметь возможность добавлять внешние файлы 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

строка пути из питона не может быть преобразована в распакованный 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

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

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

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

1 ответ

Решение

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

droid.eventWait()

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

droid.eventWaitFor()

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

Все подробности здесь.

моя вина.

Другие вопросы по тегам