Android SL4A:如何链接到HTML / javascript应用程序中的相关脚本?

时间:2011-11-13 21:04:24

标签: javascript python html sl4a

好的,所以我尝试了三种方法,可以将外部javascript和CSS文件添加到我的SL4A应用程序中。我在3UK的ZTE Racer上使用2.3 Gingerbread(带有谷歌应用程序的cyanogenmod),并使用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)

以及GUI.html中body标记末尾的内联脚本中的以下代码:

  // (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?!)。

最后,我尝试按照this question使用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初始化Web视图URL路径的任何假设 - 我更喜欢使用更动态和更正确的python sys.path[0],只要我能以某种方式将结果传达给网页视图!

我会认为这些失败本身就是一个错误,但这三个错误只是令人沮丧!我更倾向于使用这个框架,而不是回到Titanium,因为它让我有能力在进行艰难的时候降低到python并且你不希望你的javascript UI冻结,但如果我不能结构我的代码进入不同的文件我将很难利用每个代码文件中的内联jquery的SL4A电话编辑功能......

有没有办法实现这个目的?有没有人在Android上使用SL4A获得HTML5 / javascript应用程序?

1 个答案:

答案 0 :(得分:2)

这个问题的答案只是RTFM -

droid.eventWait()

采用单个可选的整数参数 - 等待任何事件的秒数。

droid.eventWaitFor()
另一方面,

允许您使用(强制)第一个参数中的字符串过滤事件类型。

所有细节here

我的坏。