javascript - 为 javascript 输入转义 NSString

标签 javascript iphone objective-c escaping ascii

我有一串 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/

相关文章:

javascript - 从 url 中删除 anchor

javascript - 使用 WebdriverJS 测试 chrome 网上商店

ios - 我无法使用自动布局

ios - 在 Swift 中快速更新 UIView 背景颜色?

iphone - 如何在 Objective-C 中动态创建实体?

iphone - Objective C 单一特定字符串替换方法

ios - willDisplayHeaderView 未在 TableViewController 中调用

javascript - jade/pug 中另一个元素内带有 id 的元素

javascript - 如何在不计算隐藏元素的情况下获取索引?

ios - 在单例中安全清除数据的最佳方法?