Вызов функции Brython из JavaScript
РЕДАКТИРОВАТЬ: сообщение группы Google
Я играю с Brython.
Я пытаюсь выяснить, как выполнить код Brython из JavaScript.
http://www.brython.info/static_doc/en/jsobjects.html <- это похоже на соответствующую страницу документации, но, похоже, отсутствует пример вызова функции Brython из JavaScript.
Для моей конкретной ситуации я слушаю события MIDI (используя https://github.com/cwilso/WebMIDIAPIShim)
Я хочу, чтобы код Brython выполнялся в ответ на полученное событие MIDI.
В настоящее время я пытаюсь:
function myMIDIMessagehandler( event )
{
if( brythonListener != null )
brythonListener( event );
и код Brython:
<script type="text/python3">
from browser import document as doc, window, html
def foo(event):
print("BRYTHON!" + event);
window.brythonListener = foo
</script>
Но когда я нажимаю заметку на своей миди-клавиатуре, я получаю:
Я не знаю, что делать с этой ошибкой, и я совсем не уверен, что подход обоснован.
1 ответ
Это был год, так что я думаю, что вы решили это давно, но, несмотря на это, ваш метод в принципе правильный, я делаю то же самое, и он работает, когда вы сопоставили его, как вы сделали с window.js_func = py_func. Вот некоторые полезные биты из кода, который я сейчас использую, который работает на chromium / firefox:
<!-- Bottom of HTML.. -->
<script type="text/javascript">
var jv_funcs = {
openfile:function(iptElement, fileType){
// some file opening code then a call back to python
open_file(reader.result, fileType);
}
};
</script>
<script type="text/python3" src="src/pythonscript.py"></script>
# separate python script in my case 'pythonscript.py'
def open_file(fileContent, fileType):
# show the file in the dom..
def open_clicked():
window.jv_funcs.openfile(document["idOpen"], "fileType")
window.open_file = open_file
document["btnOpen"].bind("click", open_clicked)
Полезно знать, что если вы используете window.console.log (событие), вы получите событие обратно как объект, который вы можете исследовать с помощью инструментов dev. С другой стороны, печать сглаживает текст.
Более серьезная проблема может заключаться в том, что может быть довольно сложно выяснить причину некоторых типов ошибок при использовании Brython (хотя все это относится к Brython, хотя это удивительно и работает очень хорошо).
Одна вещь, которая облегчает понимание таких проблем, как сопоставление исходных кодов. Недавно я переместил личный проект из Brython в Transcrypt и обнаружил, что поддержка исходных карт Transcrypt очень помогает выявить причины ошибок. Настолько, что я не пытался делать это постепенно, а просто смело компилировал исходный код python и следил за ошибками один за другим, пока все не заработало (часть python составляет около 2700 строк). Это было бы невозможно для меня в другом направлении, но, вероятно, не для кого-то со знанием внутренних органов Brython.