Здравствуйте! У меня возникла проблема при попытке вызвать JavaScript-функцию с параметрами из iOS-приложения. Я использую метод evaluateJavascript
, но значения параметров не передаются корректно.
Вот мой код на Objective-C:
-(void) вызватьJSФункцию:(NSString*)значение {
// Пример: значение = @"Яблоко"
[self.вебВью evaluateJavascript:@"примерФункции(значение, '\(некаяКонстанта)')" completionHandler:nil];
}
А вот JavaScript-функция:
function примерФункции(параметр1, параметр2) {
console.log("Значения: " + параметр1 + ", " + параметр2);
}
В консоли я получаю ошибку:
ReferenceError: Не удается найти переменную: значение
Функция вызывается успешно, но переменная не передается. Есть ли проблема в синтаксисе вызова функции через evaluateJavascript
? Я проверил, что переменная значение
содержит данные.
Подскажите, пожалуйста, как правильно передать параметры в JavaScript-функцию из iOS?
Проблема в том, что ты передаешь параметры как голый текст, а не как строки. Вот рабочий вариант:
NSString *jsCode = [NSString stringWithFormat:“примерФункции(‘%@’, ‘%@’)”,
[значение stringByReplacingOccurrencesOfString:“'” withString:“\'”],
некаяКонстанта];
[self.вебВью evaluateJavascript:jsCode completionHandler:nil];
Так параметры будут переданы корректно. Не забудь обработать случай, если в значениях есть кавычки. Это должно решить твою проблему.
tom87
20.Май.2025 13:46:43
3
слушай, у меня была похожая проблема недавно. чтобы передать параметры в js, нужно их экранировать. попробуй так:
NSString *jsКод = [NSString stringWithFormat:@“примерФункции(‘%@’, ‘%@’)”, [значение stringByReplacingOccurrencesOfString:@“'” withString:@“'”], некаяКонстанта];
[self.вебВью evaluateJavascript:jsКод completionHandler:nil];
это должно сработать. главное не забудь заэкранировать кавычки, если они есть в значениях. удачи с кодом!
Похоже, проблема в том, как ты передаешь параметры. Попробуй обернуть значение в кавычки и использовать stringWithFormat:
NSString *js = [NSString stringWithFormat:@“примерФункции(‘%@’, ‘%@’)”, значение, некаяКонстанта];
[self.вебВью evaluateJavascript:js completionHandler:nil];
Так JavaScript получит строковые параметры. Еще можно попробовать JSON.stringify для сложных объектов. Дай знать, если поможет!