SignalRチャットを呼び出すことができるようにJavaScriptコードをSwiftコードに含める必要がありますか?それができない場合、変換できますか?
sendmessage
はボタンです。
$(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');
});
});
});
signalr
コードは次のとおりです。
public void Send(string name, string message)
{
// Call the broadcastMessage method to update clients.
Clients.All.broadcastMessage(name, message);
}
更新#1:
@MartinRごとに混乱しないように質問を少し変更しました
Swift内でJavaScriptを実行できます!
Playgroundで実行して開始できる例を次に示します。
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
はTest Message: the message
。
WKWebView 呼び出し evaluate Java Script(_:completion Handler:) 内でJavaScriptコードを実行することもできます。
IWebView 内でJavaScriptを実行することもできます string By Evaluating Java Script(from:) を呼び出しますが、 methodはdeprecatedであり、iOS 2.0〜12.0としてマークされています。
JavaScriptCore frameworkを使用すると、Swift code。
最も対処するクラスは、JSContextです。このクラスは、JavaScriptコードを実行する実際の環境(コンテキスト)です。
JSContextのすべての値は、JSValue =クラスが表すように、JSValueオブジェクトですJavaScript値のデータ型。つまり、SwiftからJavaScript変数とJavaScript関数にアクセスする場合、両方とも「JSValue」オブジェクトと見なされます。
JavaScriptCore framework に関する公式ドキュメントを読むことを強くお勧めします。
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)
}
}
詳細はこれを参照してください チュートリアル