Phonegap: пользовательская обработка URL-адресов - PullRequest
0 голосов
/ 21 ноября 2011

Я разрабатываю приложение для iphone с использованием PhoneGap 1.2.0 с Snow Leopard, Xcode 4.2 и работаю в симуляторе iPhone. Я подключаюсь к стороннему веб-сайту через Oauth и мне нужно перенаправить в мое приложение с прикрепленными значениями. Следуя указаниям Джесси здесь , у меня есть следующий код:

// Objective-C code in your AppDelegate
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{
    // Do something with the url here
    NSString* jsString = [NSString stringWithFormat:@"handleOpenURL(\"%@\");", url];
    [webView stringByEvaluatingJavaScriptFromString:jsString];  // freezes here

    return YES;
}


// JS code loaded in your webview
function handleOpenURL(url)
{
    // TODO: do something with the url passed in.
    alert(url);
}

Код Objective C находится в "AppDelegate.m", а код JS находится в отдельном файле JS, указанном в index.html. Приложение зависает в строке «WebView». Я считаю, что проблема связана с тем, что что-то загружается неправильно - есть идеи? Когда приложение замораживается, если я нажимаю кнопку iPhone, затем нажимаю значок приложения, приложение перезагружается, и JS-метод handleOpenUrl запускается с оповещением как требуется.

Ответы [ 4 ]

4 голосов
/ 07 декабря 2011

Нашел решение - вдохновленный этим PhoneGap Тема группы Google .Из того, что я могу сказать, PhoneGap выполняет метод "stringByEvaluatingJavaScriptFromString", прежде чем веб-просмотр может загрузиться, отсюда и проблема с зависанием.Используя функцию window.setTimeout, мы можем убедиться, что приложение имеет достаточно времени для загрузки:

// Objective-C code in your AppDelegate
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{
    // Do something with the url here
    NSString* jsString = [NSString stringWithFormat:@
          "window.setTimeout(function() { \n"
          "handleOpenURL(\"%@\"); \n"
          "},1);", url];

    [webView stringByEvaluatingJavaScriptFromString:jsString];

    return YES;
}
0 голосов
/ 06 ноября 2012

Пользовательская обработка URL теперь является частью библиотеки Cordova, см. Здесь: Обработка пользовательской схемы Cordova URL

0 голосов
/ 18 мая 2012

А с Cordova 1.7.0 взломанный код в AppDelegate.m теперь выглядит так:

// this happens while we are running ( in the background, or from within our own app )
// only valid if ProchainBus-Info.plist specifies a protocol to handle
// HACKED - stackoverflow.com/questions/8204308/phonegap-custom-url-handling-freezing
- (BOOL) application:(UIApplication*)application handleOpenURL:(NSURL*)url 
{
if (!url) { 
    return NO; 
}

// calls into javascript global function 'handleOpenURL'
NSString* jsString = [NSString stringWithFormat:@
                      "window.setTimeout(function() { \n"
                      "handleOpenURL(\"%@\"); \n"
                      "},1);", url];
[self.viewController.webView stringByEvaluatingJavaScriptFromString:jsString];

// all plugins will get the notification, and their handlers will be called 
[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]];

return YES;    
}
0 голосов
/ 21 ноября 2011

Мне кажется, мой коллега однажды упомянул, что URL, содержащие символы "-", вызывают проблемы, есть ли в URL "-" или "_"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...