Передать переменную из Swift в функцию javascript

Возникли проблемы с использованием JContext для передачи переменной в функцию javascript. Ошибка говорит, что stringToSend не определено:

func sendSomething(stringToSend : String) {
        appController?.evaluateInJavaScriptContext({ (context) -> Void in
            context.evaluateScript("myJSFunction(stringToSend)")
            }, completion: { (evaluated) -> Void in
                print("we have completed: \(evaluated)")
        })
    }

person coco    schedule 07.01.2016    source источник


Ответы (2)


Вот как мне нравится общаться из Swift в Javascript:

func sendSomething(stringToSend : String) {
    appController?.evaluateInJavaScriptContext({ (context) -> Void in

       //Get a reference to the "myJSFunction" method that you've implemented in JavaScript
       let myJSFunction = evaluation.objectForKeyedSubscript("myJSFunction")

       //Call your JavaScript method with an array of arguments
       myJSFunction.callWithArguments([stringToSend])

       }, completion: { (evaluated) -> Void in
          print("we have completed: \(evaluated)")
    })
}

Убедитесь, что myJSFunction реализована в вашем контексте javascript, когда вы вызываете этот метод.

Ваша строка stringToSend будет автоматически сопоставлена ​​со строкой javascript при использовании callWithArguments.

person shirefriendship    schedule 07.01.2016
comment
Как бы вы это сделали, если хотите отправить более сложные объекты? Я пробовал JSExport, но это не сработало. - person hhamm; 23.09.2016

Строка нуждалась в Swift String Interpolation плюс дополнительные кавычки, например:

func sendSomething(stringToSend : String) {
        appController?.evaluateInJavaScriptContext({ (context) -> Void in
            context.evaluateScript("myJSFunction('\(stringToSend)')")
            }, completion: { (evaluated) -> Void in
                print("we have completed: \(evaluated)")
        })
    }
person coco    schedule 07.01.2016