對於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)
這是有問題的。由於回調函數被轉換爲一個字符串,所有範圍鏈信息都會丟失。
有關如何解決此問題的任何建議?
編輯:
我寧願在'查詢'功能一側的解決方案。例如:是否有任何方法將範圍鏈中的變量轉換爲eval()字符串?
如果您在[iPhone WebDev羣組](https://groups.google.com/group/iphonewebdev/topics?hl=zh-CN)上詢問,您可能會很快得到答案。 – RobG
不錯的建議,謝謝! – TinkerTank