Je dois inclure du code JavaScript dans le code Swift pour pouvoir appeler un chat signalR, est-ce possible? Sinon, puis-je le convertir?
sendmessage
est un bouton.
$(function () {
// Declare a proxy to reference the hub.
var chat = $.connection.chatHub;
// Create a function that the hub can call to broadcast messages.
chat.client.broadcastMessage = function (name, message) {
// some code
};
// Start the connection.
$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send('name', 'message');
});
});
});
et le code signalr
est:
public void Send(string name, string message)
{
// Call the broadcastMessage method to update clients.
Clients.All.broadcastMessage(name, message);
}
Mise à jour # 1:
changé un peu de question donc ce n'est pas déroutant selon @MartinR
Vous pouvez exécuter JavaScript dans Swift!
Voici un exemple que vous pouvez exécuter dans Playground pour commencer:
import JavaScriptCore
let jsSource = "var testFunct = function(message) { return \"Test Message: \" + message;}"
var context = JSContext()
context?.evaluateScript(jsSource)
let testFunction = context?.objectForKeyedSubscript("testFunct")
let result = testFunction?.call(withArguments: ["the message"])
result
serait Test Message: the message
.
Vous pouvez également exécuter du code JavaScript dans un WKWebView appel évaluer le script Java (_: gestionnaire d'achèvement:) .
Vous pouvez également exécuter JavaScript dans un IWebView en appelant string By Evaluating Java Script (from:) , mais notez que cette méthode a été obsolète et est marqué comme iOS 2.0–12.0.
En utilisant le framework JavaScriptCore , incluez du code JavaScript dans le code Swift.
La classe avec laquelle vous aurez le plus affaire est JSContext . Cette classe est l'environnement réel (contexte) qui exécute votre code JavaScript.
Toutes les valeurs dans JSContext , sont des objets JSValue , comme la classe JSValue représente le type de données de toute valeur JavaScript. Cela signifie que si vous accédez à une variable JavaScript et à une fonction JavaScript à partir de Swift, les deux sont considérés comme des objets JSValue.
Je vous conseille fortement de lire la documentation officielle concernant le framework JavaScriptCore .
import JavaScriptCore
var jsContext = JSContext()
// Specify the path to the jssource.js file.
if let jsSourcePath = Bundle.main.path(forResource: "jssource", ofType: "js") {
do {
// Load its contents to a String variable.
let jsSourceContents = try String(contentsOfFile: jsSourcePath)
// Add the Javascript code that currently exists in the jsSourceContents to the Javascript Runtime through the jsContext object.
self.jsContext.evaluateScript(jsSourceContents)
}
catch {
print(error.localizedDescription)
}
}
plus de détails réfèrent ceci tutoriel