2012-05-24 84 views
1

* 編輯 * 我做更多的研究,它看起來像餅乾也可能是答案。我想我會添加一個按鈕到嵌入式html中的窗體中,該窗體調用一個函數爲這些值創建一個cookie。然後我可以使用stringByEvaluatingJavaScriptFromString方法通過obj-c訪問這個cookie。當然,那麼你遇到了過期問題,表單的多個副本不被允許,等等。所以這是功能的折衷。我打算用window.location的路線要堅持,因爲我可以存儲這在DB,然後用戶可以創建相同形式的另一個實例 * 編輯 *堅持本地的UIWebView值

我做了一些研究我有一個模糊的想法如何實現這一點,但我很好奇,如果有更好的方法。

我有一個HTML格式的本地副本加載在我正在開發的這個iPad應用程序的UIWebView中。這些表單通過xml在服務器端提交併在那裏解析用於數據庫存儲,但不幸的是它們非常冗長。所以我想讓用戶將表單保存爲當前狀態(也許他們只填寫一半),然後再返回。

我在想什麼,我將不得不編寫一些JavaScript來解析表單中的單選按鈕和複選框,然後通過window.location技巧將這些數據傳遞給obj-c代碼。但是這非常冗長,JS和Obj-C之間來回傳遞的字符串會很長。是否有任何其他方法來獲取這些複選框/單選按鈕的值,並將它們傳遞給obj-c端以稍後重新填充?

+0

關於編輯的評論 - 它可能爲另一個應用(即不是你的應用)全局**關閉cookies(聽起來很奇怪,不確定這是否是來自Apple的錯誤或疏忽或功能)。 – Gruntcakes

+0

P.S.瀏覽器限制了cookies的大小 – Gruntcakes

+0

會在項目中使用嵌入式html頁面在uiwebview上禁用cookie嗎?如果真的發生,那似乎很愚蠢! – bgoers

回答

1

如何通過文件?將設置/數據保存到JS中的文件中,並在Objective-C域中訪問該文件。但我想你已經想到了這一點。

但是在一天結束時,數據必須來回傳遞,無論你如何做。通過window.location技巧做到這一點將是最快的,並且提供了操作系統本身沒有的限制,是否有任何理由不這樣做?

您可以將數據編碼到blob中,以便更容易傳遞。

但是另一方面,如果您希望設置在您的應用程序終止時保持不變,則通過文件路徑執行此操作可能會很有用。

你也可以實際提交表單數據,但在通過使用NSURLProtocol派生類發送它之前,在Objective-C中攔截它。如果知道數據完整,NSURLProtocol類可以允許提交進行。但是,如果window.location沒有大小限制,我沒有看到這一點。

+0

雅我決定去window.location hack路線。這不是一個難以處理的數據量,只是大到看起來很煩人,但是哦。感謝您的回答! – bgoers