编辑:谷歌集团帖子
我在和布莱顿玩。
我正在努力弄清楚如何从JavaScript执行Brython代码。
doc/en/jsobjects.html <--这看起来像相关的文档页面,但是它似乎缺少一个从JavaScript调用Brython函数的例子。
对于我的具体情况,我正在收听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>但当我按下midi键盘上的音符时,我得到:

我不知道如何处理这个错误,我也不确定这个方法是否正确。
发布于 2016-07-21 04:26:40
已经一年了,所以我想您很久以前就已经解决了,但是假设您的方法在原则上是正确的,我也是这样做的,当您将它映射为window.js_func = py_func时,它就会工作。下面是我目前正在使用的用于铬/火狐的代码中的一些相关部分:
<!-- 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(事件),您将把事件作为可以从开发工具中探索的对象。另一方面,打印将其压平成纯文本。
一个更大的问题可能是,使用Brython找出某些类型错误的原因可能是相当棘手的(尽管如此,它是惊人的,并且工作得很好)。
有一件事可以让我们更容易找到这样的问题的根源,那就是源代码映射。最近,我将一个个人项目从Brython转移到跨隐窝,发现Transcrypt的源代码地图支持非常有助于分离错误的原因。因此,我没有尝试以增量的方式执行,而是大胆地编译了python源代码,并逐个跟踪错误,直到一切正常运行(python部分大约有2700行)。对我来说,这是不可能的,但对于一个了解Brython内部结构的人来说,这是不可能的。
https://stackoverflow.com/questions/31797867
复制相似问题