Можете ли вы вызвать функцию javascript из собственного кода (не в обратном вызове), используя PhoneGap и iOS? - PullRequest
7 голосов
/ 11 октября 2011

Я надеюсь, что смогу использовать 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');"];

Ответы [ 4 ]

10 голосов
/ 11 октября 2011

Вы можете легко вызвать JavaScript из собственного кода с помощью UIWebView:

[webView stringByEvaluatingJavaScriptFromString:@"myJSFunction()"];

Чтобы использовать результат функции где-то в качестве аргумента функции JS:

NSString *stringData = getStringData(); // however you get it
[webView stringByEvaluatingJavaScriptFromString:
 [NSString stringWithFormat:@"myJSFunction(%@)", stringData]];
4 голосов
/ 25 октября 2011

Найден помощник PhoneGap для выполнения этого ... Записать javascript в webView, используя:

    [super writeJavascript:@"alert('it works');"];
1 голос
/ 13 сентября 2012

Вы должны попробовать это,

[webView stringByEvaluatingJavaScriptFromString:@"sendSelectedDate()"];
0 голосов
/ 11 октября 2011

Будет ли это работать для вас?

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DisplayWebContent/Tasks/JavaScriptFromObjC.html

взято с этой страницы:

Вы также можете вызывать функции JavaScript с аргументами. Предположим, что вы написали функцию JavaScript, которая выглядит следующим образом:

function addImage(image, width, height) { ... }

Его цель - добавить изображение на веб-страницу. Он вызывается с тремя аргументами: изображение, URL-адрес изображения; ширина, ширина экрана изображения; и высота, высота экрана изображения. Вы можете вызвать этот метод одним из двух способов из 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];
...