我有一串 ASCII 字符(由 [NSString stringWithFormat:@"%c", someNumber] 随机创建),我想将该字符串用作 javascript 方法的输入。像这样的东西:
[webView_ stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"my_javascript_method(\"%@\")", myASCIIString]];
如何转义 NSString?我尝试研究 encodeURI 和 decodeURI,但尚未找到任何解决方案。
最佳答案
NSJSONSerialization
就在 Angular 落里。将 NSString 转义为 Javascript 字符串文字困难,并且很容易出错。 (JSONKit
使用代码行来处理 https://github.com/johnezang/JSONKit/blob/82157634ca0ca5b6a4a67a194dd11f15d9b72835/JSONKit.m#L1423 )
下面是一个转义 NSString
对象的小类别方法。
#import "NSString+JavascriptEscape.h"
@implementation NSString (JavascriptEscape)
- (NSString *)stringEscapedForJavasacript {
// valid JSON object need to be an array or dictionary
NSArray* arrayForEncoding = @[self];
NSString* jsonString = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:arrayForEncoding options:0 error:nil] encoding:NSUTF8StringEncoding];
NSString* escapedString = [jsonString substringWithRange:NSMakeRange(2, jsonString.length - 4)];
return escapedString;
}
@end
另外,需要注意一件事,您必须在 javascript 函数的参数中使用双引号。例如,
NSString *javascriptCall =
[NSString stringWithFormat:@"MyJavascriptFunction(\"%@\")", escapedString];
[self.webView stringByEvaluatingJavaScriptFromString:javascriptCall];
关于javascript - 为 javascript 输入转义 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569794/