Mark
Mark

Reputation: 18214

How can you create a Javascript safe string in Swift?

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

Answers (2)

Mark
Mark

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

yuhua
yuhua

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

Related Questions