UIWebView写入磁盘方法

时间:2013-02-13 17:25:17

标签: javascript ios objective-c xcode uiwebview

我正在开发一个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;
                    }

我需要以某种方式将变量“data”返回到我调用javascript文件的.m文件中,或者将其写入文档目录,以便稍后阅读。有谁知道如何将变量写入磁盘?我一直在寻找一种方法将数据存入文件目录,但无济于事。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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);