web-dev-qa-db-fra.com

Puis-je exécuter JavaScript dans le code Swift?

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

30
user1019042

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.

49
Daniel

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

5
Ashish