Reputation: 18214
When evaluating Javascript such as:
self.evaluateJavaScript("window.messenger.sendMessage('\(message)');
How can I make sure message is of a String type that I can pass safely into this method? I can imagine a quote or newline would already mess things up.
Upvotes: 0
Views: 772
Reputation: 18214
extension String {
var javaScriptString: String {
var safeString = self as NSString
safeString = safeString.stringByReplacingOccurrencesOfString("\\", withString: "\\\\")
safeString = safeString.stringByReplacingOccurrencesOfString("\"", withString: "\\\"")
safeString = safeString.stringByReplacingOccurrencesOfString("\'", withString: "\\\'")
safeString = safeString.stringByReplacingOccurrencesOfString("\n", withString: "\\n")
safeString = safeString.stringByReplacingOccurrencesOfString("\r", withString: "\\r")
safeString = safeString.stringByReplacingOccurrencesOfString("\t", withString: "\\t")
safeString = safeString.stringByReplacingOccurrencesOfString("\u{0085}", withString: "\\u{0085}")
safeString = safeString.stringByReplacingOccurrencesOfString("\u{2028}", withString: "\\u{2028}")
safeString = safeString.stringByReplacingOccurrencesOfString("\u{2029}", withString: "\\u{2029}")
return safeString as String
}
}
Upvotes: 3
Reputation: 1249
Simply use stringByReplacingOccurrencesOfString()
to replace quotes, also create a extension for convenience:
extension String {
var stringWithoutQuote: String {
return self.stringByReplacingOccurrencesOfString("'", withString: "").stringByReplacingOccurrencesOfString("\"", withString: "")
}
}
self.evaluateJavaScript("window.messenger.sendMessage('\(message.stringWithoutQuote)');
Upvotes: 1