2011-08-22 6 views
6

を使用してJavaScriptにパイソンから私が遊んだ(私は時間のためにそれをグーグルました:))私は、簡単な質問への答えを知りたいと思ったが、私は良いもの を見つけhave'nt sl4a

をイベントを送信Pythonでsl4aと私は、jsからpythonスクリプトにイベントを送信することができますが、jsは私がpythonからjsに下のコードに入れたeventPostをキャッチしていません。

誰かがこれがどのように行われたか、またはregisterCallbackがない別の方法があるかどうかを知っていますか?

HTMLのCODE:

<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コード:

import android,time 

if __name__ == '__main__' : 

    droid = android.Android() 
    droid.webViewShow("file:///sdcard/sl4a/scripts/sample.html") 

    while True:   
     event = droid.eventWait().result 
     if event["name"] == 'doit': 
      droid.makeToast("Event catched! %s" % event['data']) 

      droid.eventPost("done","Done message") 
      time.sleep(2) 


    droid.exit() 
+0

あなたのJS alert_me関数は受け取った引数を使用しません。もしそうであれば、argは 'data'というメンバを持つでしょう。あなたの関数には' data.data'があります。これは ''完了メッセージ ''と評価されます。 –

答えて

1

これは簡単に動作しますが、明白ではないし、よく文書化されていません。

まず、webview内のAndroidオブジェクトへのフックを取得します。次に、それを使って1つ以上のコールバックを登録することができます。簡単な例として、Pythonからのメッセージでアラートをポップアップさせるだけです。この場合

var droid = new Android(); 

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

echoは、あなたがこのコールバックを処理するイベント・タイプの名前です。したがって、これは 'エコーイベント'を処理します。イベント名は任意の文字列で、意味のあるものを呼び出すだけです。

webviewを起動したPythonスクリプトでは、いつでも登録されたハンドラにイベントを投稿できます。

droid.eventPost("echo", "hello world") 

ここで2番目の引数は、JavaScriptコールバックに渡すメッセージです。

メッセージを文字列として返しても、JavaScript関数内にオブジェクトとして到着することに注意してください。そのオブジェクトは、上記のmsgと呼ばれ、dataという属性を持ち、Python側から渡した文字列を含んでいます。

0

残念ながら、私は個人的にregisterCallback()と​​3210の両方を使用して、この作業を取得することができたことがありません。しかし、あなたがまだこの作業をしたいと思っているなら、私は強くお勧めします。sl4a_r5x - SL4Aの非公式で最新かつ最新のリリースです。それはネイティブAndroidアプリが使用するのと同じxmlコードに基づいてFullScreenUiを使用するためのサポートです。これにより、あなたはあなたが何をしているのかを知ることができ、例はページ上で見つけることができます。
うまくいけば、これは役に立ちました。あなたはまだSL4Aに興味があります!

+0

実際には上記のスクリプトはうまく動作します:)私はsl4aのそのバージョンを使用していますが、fullscreenUIがより効率的になって現在では動作しないxmlプロパティを解析するまではまだ待機しています。今日は、アンドロイドをプログラムするより効率的な方法は、JavaまたはC#でモノラル化されています。ウェブスタイルのないPythonのGUIは悪夢です。あなたの答えをありがとう – dyoser

+0

jQuery Mobile UIのようなものを使用して、ネイティブに見える必要がなければ、インターフェイスを構築するのは簡単です。 –

関連する問題