Lorsque l'on écrit une application iPhone / iPad avec un UIWebView, la console n'est pas visible. cette excellente réponse montre comment piéger les erreurs, mais j'aimerais aussi utiliser la fonction console.log().
Réponses
Trop de publicités?
Barath
Points
661
parag
Points
639
J'ai essayé la solution de Leslie Godwin mais j'ai eu cette erreur :
'objectForKeyedSubscript' is unavailable: use subscripting
Pour Swift 2.2, voici ce qui a fonctionné pour moi :
Vous devrez importer JavaScriptCore pour que ce code soit compilé :
import JavaScriptCore
if let context = webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") {
context.evaluateScript("var console = { log: function(message) { _consoleLog(message) } }")
let consoleLog: @convention(block) String -> Void = { message in
print("javascript_log: " + message)
}
context.setObject(unsafeBitCast(consoleLog, AnyObject.self), forKeyedSubscript: "_consoleLog")
}
Ensuite, dans votre code javascript, appeler console.log("_votre_log_") imprimera dans la console Xcode.
Mieux encore, ajoutez ce code comme une extension de UIWebView :
import JavaScriptCore
extension UIWebView {
public func hijackConsoleLog() {
if let context = valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") {
context.evaluateScript("var console = { log: function(message) { _consoleLog(message) } }")
let consoleLog: @convention(block) String -> Void = { message in
print("javascript_log: " + message)
}
context.setObject(unsafeBitCast(consoleLog, AnyObject.self), forKeyedSubscript: "_consoleLog")
}
}
}
Et ensuite, appelez cette méthode pendant l'étape d'initialisation de votre UIWebView :
let webView = UIWebView(frame: CGRectZero)
webView.hijackConsoleLog()
- Réponses précédentes
- Plus de réponses
1 votes
Écrivez-le d'abord dans le navigateur, activez les outils de développement, puis regardez la sortie de la console.