当前位置:  开发笔记 > 编程语言 > 正文

适用于iPhone的PhoneGap:加载外部URL时出现问题

如何解决《适用于iPhone的PhoneGap:加载外部URL时出现问题》经验,为你挑选了2个好方法。

我正在使用PhoneGap编写iPad应用程序,我想加载外部URL而不触发Safari或使用像ChildBrowser这样的内部Web浏览器.

我正在使用PhoneGap iPad/iPhone示例项目,我尝试了不同的方法.在onBodyLoad()函数中,我添加了:

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

但是这一行使用一个新的Safari窗口打开链接.从那时起,无法返回PhoneGap

之后,我尝试使用document.write替换页面内容的AJAX请求

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 for BlackBerry类似的东西,建议的解决方案是修改config.xml文件


我试图直接在我的index.html中添加此标记,但它不起作用.

iPhone有什么类似的方法吗?

非常感谢



1> Claus..:

我想我找到了解决方案,

在PhoneGap Application Delegate .m文件 {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容器中的所有外部链接!

PS.您可以在周围找到对此链接的引用,但我认为它对使用0.9.5版本编写的应用程序不起作用,因为Safari默认情况下会为外部链接打开.


之后如何导航回应用程序?

2> nisc..:

对于在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:



    


注意任何googlers,它似乎应该没有"http://" - 只是"stackoverflow.com"
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有