#javascript #objective-c #events #cordova #cocoaasyncsocket
#javascript #objective-c #Мероприятия #кордова #cocoaasyncsocket
Вопрос:
Я надеюсь, что смогу использовать PhoneGap для своего приложения. Мне нужно будет создать пользовательский протокол / плагин, чтобы я мог вызывать собственные методы из Javascript. Я знаю, что вы можете вызвать функцию успеха в Javascript, когда возвращается собственный код.
Что мне нужно, чтобы иметь возможность сделать, это вызвать функцию javascript из собственного кода. По сути, приложение будет подключаться к сопутствующему приложению OSX по локальной сети, и когда приложение OSX отправляет данные в приложение iOS, они обрабатываются методом Objective C, мне нужно иметь возможность отправлять результат в PhoneGap / javascript и что-то с ним делать в WebView.
Возможно ли это? Я смог найти информацию только о вызове native из javascript, а не наоборот.
Спасибо, Томас
Используя код из ответа ниже здесь:
MyPhoneGapPlugin.m
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port {
NSLog(@"Connected To %@:%i.", host, port);
NSString* jsString = [NSString stringWithFormat:@"alert(connected to: %@);", host];
[theWebView stringByEvaluatingJavaScriptFromString:jsString];
[self readWithTag:2];
}
Выдавая мне ошибку «Неизвестный получатель»theWebView» вы имели в виду «UIWebView»?
ОБНОВЛЕНИЕ: найден ответ: с помощью помощника phonegap я могу написать что-то вроде этого…
[super writeJavascript:@"alert('connected');"];
Ответ №1:
Вы можете легко вызвать JavaScript из собственного кода с помощью UIWebView
:
[webView stringByEvaluatingJavaScriptFromString:@"myJSFunction()"];
Чтобы использовать результат функции где-нибудь в качестве аргумента для функции JS:
NSString *stringData = getStringData(); // however you get it
[webView stringByEvaluatingJavaScriptFromString:
[NSString stringWithFormat:@"myJSFunction(%@)", stringData]];
Комментарии:
1. Потрясающе, это должно сработать для меня. Я даже не думал использовать класс UIWebView, я был слишком сосредоточен на PhoneGap API, я думаю. Большое спасибо!
2. Спасибо за обновление. Вероятно, это был бы мой следующий вопрос.
3. Можно ли использовать это только в определенных местах? Я пытаюсь использовать ее в файле плагина PhoneGap ‘MyPhoneGapPlugin.m’ внутри AsyncSockets didConnectToHost, чтобы я мог уведомить webview об успешном подключении и отобразить IP-адрес, но он выдает ошибку, пожалуйста, смотрите Вопрос об обновленном коде и ошибке.
4. Хм. Ну, это означало бы, что
theWebView
это не видно изнутри этой функции. Вы должны иметь возможность видеть@property UIWebView *theWebView
илиUIWebView *theWebView
изMyPhoneGapPlugin.m
. Вы, вероятно, уже пытались убедиться в этом, но … кроме того, я действительно не знаю, почему это не сработает.5. Вырезайте n вставок, следите за чувствительностью к регистру: stringByEvaluatingJavaScriptFromString НЕ stringByEvaluatingJavaScriptFromString
Ответ №2:
Для этого найден помощник PhoneGap… Напишите javascript в WebView, используя:
[super writeJavascript:@"alert('it works');"];
Комментарии:
1. Не могли бы вы уточнить свой ответ. У меня такая же проблема, и я новичок в Cordova. Я вызвал его из MainViewController, а также из моего плагина Phonegap, он не ответил в webview. Это то, чего мне не хватает?
2. @bhuwansahni Я боюсь, что cordova, возможно, сильно изменилась с тех пор, как я это сделал, поэтому я не совсем уверен, что потребуется сейчас. Я смог вызвать ее точно так же из любых методов в моем приложении — возможно, ознакомьтесь с этой статьей в документах для получения дополнительной информации: docs.phonegap.com/en/2.0.0 /…
Ответ №3:
Вы должны попробовать это,
[webView stringByEvaluatingJavaScriptFromString:@"sendSelectedDate()"];
Ответ №4:
Будет ли это работать для вас?
Взято с этой страницы:
Вы также можете вызывать функции JavaScript с аргументами. Предположим, что вы написали функцию JavaScript, которая выглядит следующим образом:
function addImage(image, width, height) { ... }
Его цель — добавить изображение на веб-страницу. Он вызывается с тремя аргументами: image — URL-адрес изображения; width — ширина экрана изображения; и height — высота экрана изображения. Вы можете вызвать этот метод одним из двух способов из Objective-C. Первый создает массив аргументов перед использованием моста WebScriptObject:
id win = [webView windowScriptObject];
NSArray *args = [NSArray arrayWithObjects:
@"sample_graphic.jpg",
[NSNumber numberWithInt:320],
[NSNumber numberWithInt:240],
nil];
[win callWebScriptMethod:@"addImage"
withArguments:args];
Комментарии:
1. К сожалению, это зависит от OSX, и операционная система использует PhoneGap и iOS.
2. Да, мне нужна эта возможность в приложении iOS, а не в сопутствующем приложении Mac OSX. Тем не менее, спасибо.