我正在使用PhoneGap为iPad编写应用程序,我想在不触发Safari或使用像ChildBrowser这样的内部网络浏览器的情况下加载外部URL。
我正在使用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文件<access subdomains="true" uri="http://www.mysite.com/" />
我尝试直接在index.html中添加此标记,但它不起作用。
iPhone是否有类似的方法?
非常感谢
答案 0 :(得分:23)
我想我找到了解决方案,
在PhoneGap应用程序代理.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。你可以在周围找到对这个link的引用,但我认为它不适用于使用0.9.5版本编写的应用程序,因为默认情况下Safari会被外部链接打开。
答案 1 :(得分:10)
对于在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
* <access origin="http://server regexp" subdomains="true" />
* Log level: ERROR, WARN, INFO, DEBUG, VERBOSE (default=ERROR)
* <log level="DEBUG" />
*/
private void loadConfiguration() {
[...]
示例 phonegap.xml :
<?xml version="1.0" encoding="UTF-8"?>
<phonegap>
<access origin="http://stackoverflow.com" subdomains="true" />
</phonegap>
答案 2 :(得分:2)
这是有效的 - 感谢克劳斯。也许某些应用程序需要比“http”和“https”更具歧视性。
我用phonegap android做了类似的事情,见下文。提供一个接口(我在这里称之为EXTERNALLINK),从javascript调用loadExternalLink,然后将该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 CALL示例:
window.EXTERNALLINK.loadExternalLink("http://www.google.com");
答案 3 :(得分:2)
在Android中,要解决在页面转换期间屏幕变黑的问题,从PhoneGap 1.1.0开始,您可以放置:
super.setIntegerProperty("backgroundColor", Color.WHITE);
super.setStringProperty("loadingPageDialog", "Loading page...");
在DroidGap活动的onCreate()方法中的super.loadUrl之前。
以下是对具有详细信息的PhoneGap论坛的参考:
http://comments.gmane.org/gmane.comp.handhelds.phonegap/11491
答案 4 :(得分:1)
在Android中,您可以通过设置
在Web视图中打开外部链接super.setBooleanProperty("loadInWebView", true);
在DroidGap活动中的super.loadUrl之前。
这将使每个外部链接在webview中打开。如果您只想在网页视图中打开某些网域,请使用addWhiteListEntry。例如:
addWhiteListEntry("mydomain.com", true);