代码之家  ›  专栏  ›  技术社区  ›  Paul Roberts

从Python中干净地调用Webkit Javascript函数

  •  0
  • Paul Roberts  · 技术社区  · 14 年前

    对于我目前正在开发的一个应用程序,我决定使用HTML5作为接口,这样我就可以拥有一个在更改操作系统时外观不变的现代接口。当然,我选择了webkit引擎进行渲染,特别是PyQT绑定。我的问题是,每次我想从python调用javascript函数时,我都必须使用混乱的evaluateJavaScript函数。

    我可以使用任何替代方案来更直接地调用javascript函数?

    1 回复  |  直到 14 年前
        1
  •  0
  •   abarnert    14 年前

    PyQt没有任何使事情变得更容易的包装器。

    你可以自己写,如果你不想完美,但要更好一点。例如,类似这样的东西(只是一个骨架,而不是实际的代码):

    class JSObject(object):
        def __init__(self, name):
            self.name = name
        def __getattr__(self, attr):
            class Proxy(object):
                def __init__(self, objname, funcname):
                    self.name = '%s.%s' % (objname, funcname)
                def __call__(self, *args):
                    argstr = ', '.join(json.dumps(arg) for arg in args)
                    retstr = evaluateJavaScript('%s(%s)' % (self.name, argstr)
                    # realistically you may want to do more to parse the return
                    # value—e.g., look up/create JSONObjects as needed?
                    return json.loads(retstr)
            return Proxy(self, attr)
    
    thingIWantToCall = JSObject('thingIWantToCall')
    print thingIWantToCall.methodIWantToCallOnIt('foo', [1, 2, 3])
    

    正如你所看到的,它仍然有点笨拙——你必须手动创建对象代理,而且除了调用对象上的方法之外,没有办法调用自由函数或声明变量或其他任何东西。其中一些是可以实现的,但你能走多远是有限度的。(当然,您总是可以回到显式字符串。)