对于使用 UIWebView 的 iPad 应用程序,我在 URL 中将回调函数传递给应用程序:
function query(db, query, callback) {
var iframe = document.createElement("IFRAME");
// Filter comments from the callback (as this would break things).
var callbackstr = "" + callback;
callbackstr = callbackstr.replace(/\/\*.+?\*\/|\/\/.*(?=[\n\r])/g, '');
// Put the query + the callback in an url that will be caught by the iOS app.
iframe.setAttribute("src", "ios-query:#iOS#" + query +":#iOS#"+ callbackstr);
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;
}
应用程序从 URL 解析回调函数,并通过 stringByEvaluatingJavaScriptFromString 插入一些数据来调用回调函数。这一切都很好。
但是,现在我想在回调函数中使用闭包,如下所示:
var callback = function (problemdata) {
// Return the 'real' callback.
return function (tx, results) {
// Do something with problemdata
}
}(problemdataFromScopeChain)
这是有问题的。由于回调函数被转换为字符串,所有作用域链信息都会丢失。
关于如何解决这个问题的任何建议?
编辑:
我更喜欢“查询”功能方面的解决方案。例如:有没有办法将作用域链中的变量转换为 eval()-able 字符串?