PhoneGap для iPhone: проблема загрузки внешнего URL

Я пишу приложение для iPad с помощью PhoneGap, и я бы хотел загрузить внешний URL-адрес без запуска Safari или с помощью внутреннего веб-браузера, такого как ChildBrowser.

Я использую образец приложения PhoneGap iPad / iPhone, и я пробовал разные подходы. В функции onBodyLoad () я добавил:

window.location.href('http://www.wordreference.com'); 

но эта строка открывает ссылку, используя новое окно Safari. С этого момента невозможно вернуться в PhoneGap

Впоследствии я попытался с запросом AJAX, заменяющим содержимое страницы с помощью document.write

 function loadHTML(url, timeout) { if (timeout == undefined) timeout = 10000; var req = new XMLHttpRequest(); var timer = setTimeout(function() { try { req.abort(); } catch(e) {} navigator.notification.loadingStop(); },timeout); req.onreadystatechange = function() { if (req.readyState == 4) { if (req.status < 300) { clearTimeout(timer); var html = req.responseText; //just a debug print alert(html); document.write(html); } navigator.notification.loadingStop(); delete req; } }; req.open('GET', url, true); req.send(); } - function loadHTML(url, timeout) { if (timeout == undefined) timeout = 10000; var req = new XMLHttpRequest(); var timer = setTimeout(function() { try { req.abort(); } catch(e) {} navigator.notification.loadingStop(); },timeout); req.onreadystatechange = function() { if (req.readyState == 4) { if (req.status < 300) { clearTimeout(timer); var html = req.responseText; //just a debug print alert(html); document.write(html); } navigator.notification.loadingStop(); delete req; } }; req.open('GET', url, true); req.send(); } 

Теперь вызов изнутри onBodyLoad ():

 loadHTML('http://www.wordreference.com',10000); 

Открывает ссылку в контейнере PhoneGap, и это нормально. Дело в том, что я хочу загрузить динамическую страницу, написанную на Python

 loadHTML('http://www.mysite.com/cgi-bin/index.py',10000) 

На данный момент Safari не вызывается, но отображается черная страница в контейнере PhoneGap! Я хочу указать, что ссылка отлично работает, если я набираю ее в Safari (я не могу сообщить об этом для проблем с конфиденциальностью).

Может быть, это проблема, связанная с каким-то необходимым разрешением ???

Я нашел нечто похожее на PhoneGap для BlackBerry, и предлагаемое решение состояло в том, чтобы изменить файл config.xml с помощью

  

Я попытался добавить этот тег непосредственно в свой index.html, но он не работает.

Есть ли аналогичный подход для iPhone?

большое спасибо

5 Solutions collect form web for “PhoneGap для iPhone: проблема загрузки внешнего URL”

Я думаю, что нашел решение,

в делете делегирования приложения PhoneGap .m file {YourProject} AppDelegate.m , измените метод:

 - (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { return [super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType]; } 

с

 - (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = [request URL]; if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"]) { return YES; } else { return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; } } 

Это откроет все внешние ссылки в контейнере PhoneGap !!!

пс. Вокруг вы найдете ссылки на эту ссылку, но я думаю, что это не работает для приложения, написанного с использованием версии 0.9.5, так как Safari открывается для внешних ссылок по умолчанию.

Для людей, имеющих эту проблему в Android:

Я не знаю о более ранних версиях, но в PhoneGap 1.1.0 вы можете создать файл с именем res / xml / phonegap.xml и перечислить домены, которые не должны открываться во внешнем браузере.

От DroidGap.java :

  /** * Load PhoneGap configuration from res/xml/phonegap.xml. * Approved list of URLs that can be loaded into DroidGap *  * Log level: ERROR, WARN, INFO, DEBUG, VERBOSE (default=ERROR) *  */ private void loadConfiguration() { [...] 

Пример phonegap.xml :

 < ?xml version="1.0" encoding="UTF-8"?>    

Это работает – спасибо Клаусу. Возможно, некоторые приложения должны быть более четкими, чем просто «http» и «https».

Я сделал аналогичную вещь с Android-телефоном, см. Ниже. Предоставьте интерфейс (который я называю здесь EXTERNALLINK), вызовите loadExternalLink из javascript, а затем загрузите этот url в текущий WebView. Я не эксперт, но, похоже, работает для меня и только для ссылок, к которым вы хотите применить.

МЕРОПРИЯТИЯ:

 public class AndroidActivity extends DroidGap { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { super.loadUrl("file:///android_asset/www/index.html"); this.appView.addJavascriptInterface(new JavaScriptInterface(), "EXTERNALLINK"); } catch(Exception lException) { throw new RuntimeException("hello hello", lException); } } class JavaScriptInterface { public void loadExternalLink(String lUrl) { try { loadUrl(lUrl); } catch(Exception lEx) { int i = 0; } } } } 

ПРИМЕР ИСПОЛЬЗОВАНИЯ JAVASCRIPT:

window.EXTERNALLINK.loadExternalLink("http://www.google.com");

В Android, чтобы обойти проблему черного экрана во время переходов страницы, с PhoneGap 1.1.0 вы можете поставить:

 super.setIntegerProperty("backgroundColor", Color.WHITE); super.setStringProperty("loadingPageDialog", "Loading page..."); 

до super.loadUrl в методе onCreate () вашей активности DroidGap.

Вот ссылка на дискуссионный форум PhoneGap с подробностями:

http://comments.gmane.org/gmane.comp.handhelds.phonegap/11491

В Android вы можете сделать внешние ссылки открытыми внутри webview, установив

 super.setBooleanProperty("loadInWebView", true); 

до super.loadUrl в вашей деятельности DroidGap.

Это заставит каждую внешнюю ссылку открываться в веб-просмотре. Если вы хотите открыть только определенные домены в webview, используйте вместо этого addWhiteListEntry . Пример:

 addWhiteListEntry("mydomain.com", true); 
Давайте будем гением компьютера.