UIWebView 写入磁盘方法

Posted

技术标签:

【中文标题】UIWebView 写入磁盘方法【英文标题】:UIWebView write to disk method 【发布时间】:2013-02-13 17:25:16 【问题描述】:

我正在开发一个 UIWebView 应用程序,并从 javascript 代码中的服务器获取一些信息。我希望将 JSON 文本写入文档目录中的文件。我的 javascript 文件的开头部分是:

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 文件中,或者将其写入文档目录,以便稍后阅读。有人知道如何将变量写入磁盘吗?我一直在寻找一种将数据写入文档目录的方法,但无济于事。任何帮助将不胜感激。

【问题讨论】:

也许这可以帮助你a link! 【参考方案1】:

我知道从 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);

【讨论】:

以上是关于UIWebView 写入磁盘方法的主要内容,如果未能解决你的问题,请参考以下文章

在目标 c 中从 UIWebView.scrollView 写入 PDF 文件

如何更改 UIWebView 中的字符编码?

在 UIWebView 中恢复位置

在 UIWebView 中使用本地 CSS 文件

将事件日期从UIWebView同步到手机日历

将多个 UIWebViews 作为 UIImages 写入 PDF 文件