2012-04-10 4 views
0

У меня есть мобильное приложение jquery, которое я обертываю в Phonegap для магазина Iphone/Android. У меня есть одна страница, которая использует iframe, который без Phonegap работает так, как вы ожидали. Однако, как только он завернут, Iframe фактически заставляет приложение открывать новое окно/браузер и покинуть приложение. Кто-нибудь знает, есть ли решение для этого? Чин!Iframe открывается в новом окне, однажды завернутый в Phonegap

+0

Я знаю, что это проблема на Android. Кроме того, я не уверен, что мы сможем исправить это, пока не сделаем некоторые внутренние изменения в способе обработки истории. –

+0

Это ошибка в android. http://code.google.com/p/android/issues/detail?id=17535 Ищете обходное решение самостоятельно ... – user1496391

ответ

1

http://denrobapps.com/2010/12/phonegap-and-iframes/

Во-первых, откройте PhoneGapDelegate.m и найти этот блок кода:

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
NSURL *url = [request URL]; 

/* 
* Get Command and Options From URL 
* We are looking for URLS that match gap://<Class>.<command>/[<arguments>][?<dictionary>] 
* We have to strip off the leading slash for the options. 
*/ 
if ([[url scheme] isEqualToString:@"gap"]) { 

    InvokedUrlCommand* iuc = [[InvokedUrlCommand newFromUrl:url] autorelease]; 

    // Tell the JS code that we've gotten this command, and we're ready for another 
    [theWebView stringByEvaluatingJavaScriptFromString:@"PhoneGap.queue.ready = true;"]; 

    // Check to see if we are provided a class:method style command. 
    [self execute:iuc]; 

    return NO; 
} 

/* 
* If a URL is being loaded that's a local file URL, just load it internally 
*/ 
else if ([url isFileURL]) 
{ 
    //NSLog(@"File URL %@", [url description]); 
    return YES; 
} 

/* 
* We don't have a PhoneGap or local file request, load it in the main Safari browser. 
*/ 
else 
{ 
    //NSLog(@"Unknown URL %@", [url description]); 
    //[[UIApplication sharedApplication] openURL:url]; 
    return NO; 
} 

return YES; 
} 

Вставьте это еще-если прямо под первым, если заявление этого блока:

else if ([[url scheme] isEqualToString:@"http"]) 
{ 
    return YES; 
} 

Также убедитесь, что [[UIApplication sharedApplication] openURL: url] раскомментирован в последнем объявлении else (иначе ссылки в iFrame не будут работать):

else 
{ 
    //NSLog(@"Unknown URL %@", [url description]); 
    [[UIApplication sharedApplication] openURL:url]; 
    return NO; 
} 
+0

спасибо, что это сработало для меня! – 29er

0

Это потому, что телефонная задержка отключает внешний контент по умолчанию и относится к встроенному браузеру.

Вы можете это исправить в файле /res/xml/cordova.xml

правой кнопкой мыши -> открыть с текстовым редактором , а затем искать там строки:

<access origin="http://127.0.0.1*"/> <!-- allow local pages --> 
<!-- <access origin="https://example.com" /> allow any secure requests to example.com --> 
<!-- <access origin="https://example.com" subdomains="true" /> such as above, but including subdomains, such as www --> 
<!-- <access origin=".*"/> Allow all domains, suggested development use only --> 

Я думаю документацию там говорит сам за себя. Я не знаю, как разрешить несколько истоков доступа (я размещаю весь код на одном сервере) и также указываю свой исходный файл. Поэтому я больше не использую/assets/www.

Смежные вопросы