2013-02-13 192 views
0

我正在使用UIWebView應用程序,並從JavaScript代碼中的服務器獲取一些信息。我希望將JSON文本寫入文檔目錄中的文件。我的JavaScript文件的開頭部分是:UIWebView寫入磁盤方法

WW.FS = { 
    init: function(animation, back, fn) { 
     var me = window.ww ? ww.fs : null; 

     if (me != null) { 
      PL.tellNative('pl:closeMore'); 
     } 

     if (!me || !back) { 
      Ext.Ajax.request({ 
       url: WW.getBS(), 
       method: 'POST', 
       params: {ajax: true, source: 'Touch', ID: 'INT'}, 
       success: function(response) { 
        try { 
         data = JSON.parse(response.responseText); <--- want to write this to the documents directory!! 
        } catch(e) { 
         PL.indicatorOff(); 
         return false; 
        } 

我需要以某種方式得到變量「數據」回無論是從我把它叫做JavaScript文件.m文件或​​將其寫入文件的目錄,以便我能稍後閱讀。有誰知道如何將變量寫入磁盤?我一直在尋找一種方法將數據傳輸到文檔目錄中,但沒有用處。任何幫助將不勝感激。

+0

也許這可以幫助你[鏈接](http://mobdevelopment.wordpress.com/2012/07/28/how-to-call-an-objective-c-method-from-javascript/)! – Scar 2013-02-13 17:44:37

回答

0

我知道從UIWebView中的JavaScript獲取數據返回到本地代碼的唯一方法是通過UIWebViewDelegate方法webView:shouldStartLoadWithRequest:navigationType。基本上這個調用允許你過濾在你的UIWebView中進行的URL加載調用。您重寫此方法,並在負載繼續時返回YES。訣竅是在URL中嵌入一些字符串,使URL無效,並且您知道意味着您正在嘗試傳遞數據。這裏有一個例子:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
NSString *requestString = [[[request URL] absoluteString] stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 
NSArray *requestArray = [requestString componentsSeparatedByString:@":##key_val##"]; 

    if ([requestArray count] > 1) 
    { 
     //...do your custom stuff here, all the values sent from javascript are in 'requestArray' 
     return NO;//abort loading since this is an invalid URL anyway 
    } 
    else 
    { 
     return YES; 
    } 
} 

在JavaScript中添加如下內容:

function sendToApp(_key, _val) 
{ 
    var iframe = document.createElement("IFRAME"); 
    iframe.setAttribute("src", _key + ":##key_val##" + _val); 
    document.documentElement.appendChild(iframe); 
    iframe.parentNode.removeChild(iframe); 
    iframe = null; 
} 

所以從JavaScript發送數據到本地代碼,你做這樣的事情:

sendToApp('state', event.data);