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()
с другой стороны, позволяет фильтровать тип события со строкой в (обязательном) первом аргументе.
Все подробности здесь.
моя вина.