我有一個webview我從中調用返回結果的方法JSON.stringify();
然後它被存儲在數據庫中,稍後用於恢復webview中的頁面狀態。從WebView與JSON字符串的NSString
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此行之後是無效的:
通過web視圖返回的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返回的字符串已經被轉義以便在雙引號內使用。
的可能的複製http://stackoverflow.com/questions/14198331/how-to-pass-json-nsstring-containing-json-to-a-javascript-method-從目標 – 2intor
這是不是和提出的解決方案在給定的SO問題不解決我的問題(以及它如何轉移到編碼百分比,我需要逃脫引號!)。 –
我使用了[這裏]建議的解決方案(http://stackoverflow.com/a/770533/923340),這並不理想,因爲這意味着我的序列化方法將會轉義。不過,如果我能有一個基於Objective-C的解決方案,那會更好。 –