来自webview的带有JSON字符串的NSString

NSString from webview with JSON string

本文关键字:字符串 NSString JSON webview 来自      更新时间:2023-09-26

我有一个Web视图,从中调用一个返回JSON.stringify();结果的方法然后将其存储在数据库中,稍后用于恢复网页视图中的页面状态。

NSString *data = [self.browser stringByEvaluatingJavaScriptFromString:@"course.serialize();"];
[self.course storeRawSerializedData:data];

当它从数据库(核心数据)中检索时,我将它注入到加载的html页面源中,如下所示:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
    if(_data){
        NSString* content = [[NSString alloc] initWithData:_data
                                                  encoding:NSUTF8StringEncoding];
        _data = nil;
        _jsReady = YES;
        NSString *data = @"";
        if(self.course.returnRawSerializedData){
            data = [data stringByAppendingString:@"<script type='"text/javascript'">var restoreData=%@;</script>"];
            data = [NSString stringWithFormat:data, self.course.returnRawSerializedData];
        }
        //inject extra content to the page
        content = [data stringByAppendingString:content];
        //load modified HTML string
        [self.browser loadHTMLString:content baseURL:_url];
    }
}

问题是JSON在这次旅行后无效:

webview返回的json为:

{"status":"incomplete","data_json":"{'"colour'":'"#000000'"}"}

注射后看起来是这样的:

<script type='"text/javascript'">var restoreData={"status":"incomplete","data_json":"{'"colour'":'"#000000'"}"};</script>

页面返回SyntaxError: JSON parse error: Unexpected identifier "object"

当我在stringByAppendingString方法中用单引号或双引号包装它时,页面将返回SyntaxError: JSON parse error: Expected '}'

当我(手动)转义所有双引号时,它会起作用,但我没有;我不知道如何用程序实现,我希望从字符串ByEvaluatingJavaScriptFromString返回的字符串已经转义,以便在双引号中使用。

您也可以考虑以下作为解决方案,

Base64对要在Objective-C中注入的NSString进行编码,在Javascript中执行相反的操作。

转义引号将起作用。

例如:

content = [content stringByReplacingOccurrencesOfString:@"'"" withString:@"'''""];