SL4A-Python: webViewShow显示简单HTML页面,脚本终止后不消失

0 投票
3 回答
1636 浏览
提问于 2025-04-18 06:41

我没有找到相关的答案,SL4A的版本是R6,Py4A是R5。事情很简单,应用程序调用了webViewShow来显示一个HTML页面,页面显示得很好,脚本也结束了,但页面就是不想消失。无法进入菜单,返回键也不管用,只有主页键能用,这样的话如果脚本是通过adb运行的,就需要在应用管理器里强制关闭sl4a;如果是在设备上的解释器里运行的,就得结束这个脚本。我还试过访问http://www.google.com,结果也是一样。webViewShow返回的是NoneType,但页面还是显示出来了。

示例:

    import android
    droid = android.Android() 
    droid.webViewShow('/sdcard/sl4a/scripts/main_view.html'

HTML:

    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="viewport" id="viewport"
            content="width=device-width, target-densitydpi=device-dpi,
            initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
            />
      </head>
      <body >
        <h1 style="text-align:center">Supervisor</h1>

      </body>
    </html>

提前谢谢大家!

3 个回答

0

我同意佩德罗的看法。这是从sl4a中退出webview的唯一方法,这一点得到了项目最后一任维护者达蒙·科尔赫的确认,在项目最终被分叉之前。

一旦你部署了一个webview,除了通过它内部的js代码,别无他法可以关闭它。

<script> var droid = new Android(); </script>

然后把这个代码附加到一个元素上。

onclick="droid.eventPost('kill', ''); droid.dismiss();

对我来说,我通过eventWait使用一个eventPost回调到我的主脚本。

while True:
    event = droid.eventWait().result
    if event['name'] == 'kill':
        pipe.send('kill')
        pipe.close()

我发现这样做效果非常好,因为我使用bottle来将我的webview作为两个独立的进程提供服务,并且需要一种方法在webview退出后立即关闭我的脚本。

0

我也遇到了这个问题,找不到合适的解决办法。在我的情况下,我怀疑这个脚本在WebView关闭之前无法完全“结束”...这就像是个死循环。为了绕过这个问题,我在手机的菜单按钮上添加了一个明确的“退出”选项,然后再打开WebView:

# give us a way to escape from the webview
droid.addOptionsMenuItem('Quit','menu-quit',None,"ic_lock_power_off")

这并不是最理想的办法(用户还是得去找这个退出选项,或者事先知道它的存在),但在我的手机上(SL4A r6,Android 2.3.7)似乎能同时关闭脚本和WebView。

0

也许这能帮到你:

<script>
    var droid = new Android();
</script>

<input type="button" value="Exit" onclick="droid.dismiss();" />

撰写回答