我能想到的唯一解决方案是使用JS,但我无法将任何变量从幻影脚本传递给我正在尝试执行的JS。
是的,QtWebKit桥接C++和JS之间在传递数据方面存在问题。它可以工作,但从JS到C++比相反更好。
我们有许多问题需要解决,但这是需求最高的问题之一。
同时,我通常会像这样“装饰”page
对象:
var page = require("webpage").create();
page.evaluateWithParams = function(func) {
var args = [].slice.call(arguments, 1),
str = 'function() { return (' + func.toString() + ')(',
i, ilen, arg;
for (i = 0, ilen = args.length; i < ilen; ++i) {
arg = args[i];
if (/object|string/.test(typeof arg)) {
str += 'JSON.parse(' + JSON.stringify(JSON.stringify(arg)) + '),';
} else {
str += arg + ',';
}
}
str = str.replace(/,$/, '); }');
return this.evaluate(str);
}
然后,您可以在页面范围内调用函数,如下所示:
var a = 1, b = 2;
page.evaluateWithParams(function(arg1, args) {
// your code that uses arg1 and arg2
}, a, b);