Для приложения iPad, использующего UIWebView, я передаю функцию обратного вызова приложению по 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)
Это проблематично.Поскольку функция обратного вызова преобразуется в строку, вся информация о цепочке областей действия теряется.
Есть предложения о том, как решить эту проблему?
edit:
Я бы предпочелрешение на стороне функции «запрос».Например: есть ли способ преобразовать переменные в цепочке областей видимости в строку, способную к вычислению eval ()?