使用sl4将事件从python发送到javascript

2024-09-19 23:35:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道一个简单问题的答案,但没有找到一个好的答案 (我在谷歌上搜索了几个小时:)

我正在用python玩sl4a,我可以将事件从js发送到python脚本,但是js没有捕捉到我在下面从python到js的代码中放入的eventPost。在

有人知道这是怎么做到的,或者有没有其他没有registerCallback的方法?在

HTML代码:

<html>
<head>
<script>
var droid = new Android();
function doit(){
    droid.makeToast("Text send :=>"+document.getElementById("msg").value);
    droid.eventPost("doit",document.getElementById("msg").value);
}

function alert_me(data){
    droid.makeToast("All done!");
    document.getElementById("msg").value = '';
}

droid.registerCallback("done",alert_me);
</script>
</head>
<body>
<input type="text" name="boton" id="msg" value="" />
<input type="button" name="boton" value="Go!" onclick="javascript:doit()" />
</body>
</html>

PYTHON代码:

^{pr2}$

Tags: 答案代码valuehtmljsscriptfunctionmsg
2条回答

不幸的是,我个人从来没能做到这一点,同时使用registerCallback()和{}。但是,如果你仍然想让这个工作起来,我强烈建议你去下载sl4a_r5x,这是一个非官方但更新的SL4A版本,它支持使用基于原生Android应用程序使用的相同xml代码的FullScreenUi。有了这个,你就可以做你想做的事了,你可以在页面上找到例子。
希望这对你有帮助,你仍然对SL4A感兴趣!在

这很容易操作,但并不明显,也没有很好的文档记录。在

首先,您需要一个钩子到webview中的Android对象。然后可以使用它注册一个或多个回调。对于一个简单的例子,我们将只做一个弹出一个带有Python消息的警报。在

    var droid = new Android();

    droid.registerCallback("echo", function(msg) {
        alert(msg.data)
    });

在本例中,echo是您希望此回调处理的事件类型的名称。所以这将处理“回声事件”。事件名称是任意字符串,只要有意义就可以调用它们。在

在启动webview的Python脚本中,现在可以随时向注册的处理程序发布事件。在

^{pr2}$

这里的第二个参数是要传递给JavaScript回调的消息。在

请注意,尽管您将消息作为字符串返回,但它作为对象到达JavaScript函数。上面我们称之为msg的对象有一个名为data的属性,其中包含从Python端传递的字符串。在

相关问题 更多 >