来自 webview 的 NSString 和 JSON 字符串
Posted
技术标签:
【中文标题】来自 webview 的 NSString 和 JSON 字符串【英文标题】:NSString from webview with JSON string 【发布时间】:2014-04-14 10:33:07 【问题描述】:我有一个 webview,我从中调用一个返回 JSON.stringify();
结果的方法
然后将其存储在数据库中,稍后用于在 webview 中恢复页面的状态。
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 ''
当我(手动)转义所有双引号但我不知道如何以编程方式进行时,它可以工作,我希望从 stringByEvaluatingJavaScriptFromString 返回的字符串已经转义以在双引号中使用。
【问题讨论】:
***.com/questions/14198331/…的可能重复 它不是,并且在给定的 SO 问题中提出的解决方案不能解决我的问题(当它转义为百分比编码并且我需要转义引号时它怎么能解决!)。 我使用here 提出的解决方案,这并不理想,因为这意味着我的序列化方法会转义。但是,如果我能有一个基于 Objective-C 的解决方案会更好。 【参考方案1】:您也可以考虑以下作为解决方案,
你 Base64
编码你想要注入的 NSString
Objective-C
在 Javascript
中执行相反的操作。
【讨论】:
这是我现在使用的解决方案的变体(请参阅带有源链接的评论),它不是理想的解决方案,这次我可以控制 JS,我可以修改返回值或者在这种情况下注入价值,但它可能并不总是可能的。我希望有内置的解决方案或至少有一些方法可以为我做到这一点。 我接受这一点,因为无论如何这就是我现在这样做的方式,但遗憾的是没有内置的解决方案。【参考方案2】:转义引号会起作用。
例如:
content = [content stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
【讨论】:
以上是关于来自 webview 的 NSString 和 JSON 字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何使用来自 NSString 的 NSJSONSerialization 解析 Json [重复]
使用 WebView 将 HTML 加载到 Cocoa 应用程序中并更改文本