问题
QPython3, Android 6.0; I guess JS cann't instance var droid = new Android(); Any hints to solve the problem?
Python Code (the same in both cases!):
import android
droid=android.Android()
droid.webViewShow('file:///storage/emulated/0/qpython/scripts3/test10_le_HTMLGUI_01.html')
while True:
result=droid.eventWaitFor('sag').result
droid.ttsSpeak(result['data'])
HTML-Code: test10_le_HTMLGUI_01.html (Case 1):
<html>
<head>
<title>Text To Speech</title>
<script>
var n = prompt("Hello JavaScript","");
var droid = new Android();
var speak = function() {
var n = prompt("Hello JavaScript","");
droid.eventPost("sag", document.getElementById("sag").value, 1);
}
</script>
</head>
<body>
<form onsubmit="speak(); return false;">
<label for="sag">What is your message?</label>
<input type="text" id="sag" />
<input type="submit" value="Speak" />
</form>
</body>
</html>
HTML-Code (Case 2):
<html>
<head>
<title>Text To Speech</title>
<script>
var droid = new Android();
var n = prompt("Hello JavaScript","");
var speak = function() {
var n = prompt("Hello JavaScript","");
droid.eventPost("sag", document.getElementById("sag").value, 1);
}
</script>
</head>
<body>
<form onsubmit="speak(); return false;">
<label for="sag">What is your message?</label>
<input type="text" id="sag" />
<input type="submit" value="Speak" />
</form>
</body>
</html>
While in case 1 the prompt("Hello JavaScript",""); is executed it is not in case 2!
QPython3 (Android 6) SL4A eventPost() and eventWaitFor() works fine on the following example (for add. info refer to http://www.mithril.com.au/android/doc/):
import android, time
droid=android.Android()
t = 'Geschafft!'
print('debug 1')
droid.eventPost('Event1', t, 1)
print('debug 2')
print('debug 3')
result=droid.eventWaitFor('Event1').result
droid.ttsSpeak(result['data'])
print('debug 4')
print(result['data'])
Proof: If you comment out the line droid.eventPost('Event1', t, 1) then eventWaitFor() will block forever!
Maybe we 've a similar Problem in QPython3 webViewShow - Script doesn't receiving data and in https://stackoverflow.com/questions/36478310/qpython-webview-javascript-android-object
Regards Gustav (2017-03-21)
回答1:
Use bottle() instead of JavaScript. It's already integrated in QPython3 and provides solutions for pretty the same tasks. Find a tutorial for bottle() at https://bottlepy.org/docs/dev/bottle-docs.pdf
Regards Gustav
回答2:
I encountered same problem. As far as I found, at least in recent version you're required to add an Android interface when using webview by calling JavascriptAddInterface, and from the SL4A sources seems like it doesn't. Too bad...
来源:https://stackoverflow.com/questions/42928283/qpython3-problems-with-javascript-in-html-gui