Javascript 为什么不';phonegap应用程序中iframe内的t链接是否正常工作?

Javascript 为什么不';phonegap应用程序中iframe内的t链接是否正常工作?,javascript,android,facebook,cordova,iframe,Javascript,Android,Facebook,Cordova,Iframe,我正在开发一个Phonegap应用程序。我的一个页面包含来自Facebook的iframe,用于显示来自Facebook页面的帖子。到现在为止,一直都还不错。在Android上,iframe中的链接不起作用。当我点击它们时,什么也不会发生。我还没有确认同样的问题是否发生在iOS上。有人知道这是为什么或者如何修复它吗 为了澄清我想要的行为:来自facebook的iframe内的所有链接都应该在我的应用程序外的外部浏览器中打开。现在,什么也没发生 测试内容:我创建了一个带有链接的简单html文件。我

我正在开发一个Phonegap应用程序。我的一个页面包含来自Facebook的iframe,用于显示来自Facebook页面的帖子。到现在为止,一直都还不错。在Android上,iframe中的链接不起作用。当我点击它们时,什么也不会发生。我还没有确认同样的问题是否发生在iOS上。有人知道这是为什么或者如何修复它吗

为了澄清我想要的行为:来自facebook的iframe内的所有链接都应该在我的应用程序外的外部浏览器中打开。现在,什么也没发生

测试内容:我创建了一个带有链接的简单html文件。我构建了那个html文件。链接不起作用。当直接(而不是通过iframe)放入链接时,链接工作


很明显,但请注意:我无法更改来自facebook的iframe中的html。

我仍然不确定您的实际需求是什么。但是我在Cordova3.5项目中使用iframe加载一个外部页面,它可以正常加载页面

<iframe src="http://google.com/" frameborder="0" style="width: 100%; height: 100%;"></iframe>
我还需要在点击移动系统浏览器时打开链接,为此我使用了一个SO答案来调整本机iOS代码,如下所示:

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    NSString *str = url.absoluteString;
    NSRange range = [str rangeOfString:@"http://"];
    NSRange range1 = [str rangeOfString:@"https://"];

    if (range.location != NSNotFound || range1.location != NSNotFound) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }else {
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}
我还没有找到一个解决方案,当用户点击时在android系统浏览器中打开链接。应用程序内部的链接不断打开

让我知道这是怎么回事。
干杯。

我还不确定你的实际要求是什么。但是我在Cordova3.5项目中使用iframe加载一个外部页面,它可以正常加载页面

<iframe src="http://google.com/" frameborder="0" style="width: 100%; height: 100%;"></iframe>
我还需要在点击移动系统浏览器时打开链接,为此我使用了一个SO答案来调整本机iOS代码,如下所示:

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    NSString *str = url.absoluteString;
    NSRange range = [str rangeOfString:@"http://"];
    NSRange range1 = [str rangeOfString:@"https://"];

    if (range.location != NSNotFound || range1.location != NSNotFound) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }else {
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}
我还没有找到一个解决方案,当用户点击时在android系统浏览器中打开链接。应用程序内部的链接不断打开

让我知道这是怎么回事。
干杯。

我还不确定你的实际要求是什么。但是我在Cordova3.5项目中使用iframe加载一个外部页面,它可以正常加载页面

<iframe src="http://google.com/" frameborder="0" style="width: 100%; height: 100%;"></iframe>
我还需要在点击移动系统浏览器时打开链接,为此我使用了一个SO答案来调整本机iOS代码,如下所示:

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    NSString *str = url.absoluteString;
    NSRange range = [str rangeOfString:@"http://"];
    NSRange range1 = [str rangeOfString:@"https://"];

    if (range.location != NSNotFound || range1.location != NSNotFound) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }else {
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}
我还没有找到一个解决方案,当用户点击时在android系统浏览器中打开链接。应用程序内部的链接不断打开

让我知道这是怎么回事。
干杯。

我还不确定你的实际要求是什么。但是我在Cordova3.5项目中使用iframe加载一个外部页面,它可以正常加载页面

<iframe src="http://google.com/" frameborder="0" style="width: 100%; height: 100%;"></iframe>
我还需要在点击移动系统浏览器时打开链接,为此我使用了一个SO答案来调整本机iOS代码,如下所示:

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    NSString *str = url.absoluteString;
    NSRange range = [str rangeOfString:@"http://"];
    NSRange range1 = [str rangeOfString:@"https://"];

    if (range.location != NSNotFound || range1.location != NSNotFound) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }else {
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}
我还没有找到一个解决方案,当用户点击时在android系统浏览器中打开链接。应用程序内部的链接不断打开

让我知道这是怎么回事。
干杯。

从cordova版本cli-6.0.0开始,我遇到了同样的问题,我解决了用“onclick”事件设置document.location.href以编程方式替换iframe中的每个链接的问题

这是我在cordova小部件中输入的代码:

fix_link = function()
{ 
    $("a").each(function () { 
        $(this).attr("dest_url", $(this).attr("href")) 
        $(this).removeAttr("href") 
        $(this).click(function () { 
            document.location.href = $(this).attr("dest_url");
        })
    });
}

var iframe = document.createElement('iframe');
iframe.onload = function () {
    document.framewrap.eval("fix_link_func = " + String(fix_link));
    document.framewrap.eval("fix_link_func();");
}; 
iframe.src = 'http://www.yoursite.com';
iframe.id = "framewrap";
iframe.name = "framewrap";
document.body.appendChild(iframe);

如果您找到更好的解决方案,请告诉我

从cordova版本cli-6.0.0开始,我遇到了同样的问题,我解决了用“onclick”事件设置document.location.href以编程方式将每个链接替换到iframe中的问题

这是我在cordova小部件中输入的代码:

fix_link = function()
{ 
    $("a").each(function () { 
        $(this).attr("dest_url", $(this).attr("href")) 
        $(this).removeAttr("href") 
        $(this).click(function () { 
            document.location.href = $(this).attr("dest_url");
        })
    });
}

var iframe = document.createElement('iframe');
iframe.onload = function () {
    document.framewrap.eval("fix_link_func = " + String(fix_link));
    document.framewrap.eval("fix_link_func();");
}; 
iframe.src = 'http://www.yoursite.com';
iframe.id = "framewrap";
iframe.name = "framewrap";
document.body.appendChild(iframe);

如果您找到更好的解决方案,请告诉我

从cordova版本cli-6.0.0开始,我遇到了同样的问题,我解决了用“onclick”事件设置document.location.href以编程方式将每个链接替换到iframe中的问题

这是我在cordova小部件中输入的代码:

fix_link = function()
{ 
    $("a").each(function () { 
        $(this).attr("dest_url", $(this).attr("href")) 
        $(this).removeAttr("href") 
        $(this).click(function () { 
            document.location.href = $(this).attr("dest_url");
        })
    });
}

var iframe = document.createElement('iframe');
iframe.onload = function () {
    document.framewrap.eval("fix_link_func = " + String(fix_link));
    document.framewrap.eval("fix_link_func();");
}; 
iframe.src = 'http://www.yoursite.com';
iframe.id = "framewrap";
iframe.name = "framewrap";
document.body.appendChild(iframe);

如果您找到更好的解决方案,请告诉我

从cordova版本cli-6.0.0开始,我遇到了同样的问题,我解决了用“onclick”事件设置document.location.href以编程方式将每个链接替换到iframe中的问题

这是我在cordova小部件中输入的代码:

fix_link = function()
{ 
    $("a").each(function () { 
        $(this).attr("dest_url", $(this).attr("href")) 
        $(this).removeAttr("href") 
        $(this).click(function () { 
            document.location.href = $(this).attr("dest_url");
        })
    });
}

var iframe = document.createElement('iframe');
iframe.onload = function () {
    document.framewrap.eval("fix_link_func = " + String(fix_link));
    document.framewrap.eval("fix_link_func();");
}; 
iframe.src = 'http://www.yoursite.com';
iframe.id = "framewrap";
iframe.name = "framewrap";
document.body.appendChild(iframe);

如果您找到更好的解决方案,请告诉我

根据你的代码片段,我成功截获了点击iOS。那部分就完成了。现在我仍然需要在安卓上解决这个问题。由于iFrame内的链接似乎根本不起作用,Android上的操作似乎更难。如果我发现更多,我会更新。很高兴它有帮助。我仍然无法通过用户点击打开android上sys浏览器中的链接。如果您正在尝试电子邮件链接,那么只需使用普通html中使用的mailto,这对于打开本机电子邮件应用程序非常有效。此外,iframe还可以用我的代码加载其他网站,但在我尝试这样做时没有加载facebook。@Emiam我在android上使用相同的方法在iframe中打开链接,并且成功了。你面临的确切问题是什么?上次我从你的评论中漏掉了这一点。@Gallwynmasc iframe的宽度和高度不能用百分比表示。我根据你的代码片段成功截获了对iOS的点击。那部分就完成了。现在我仍然需要在安卓上解决这个问题。由于iFrame内的链接似乎根本不起作用,Android上的操作似乎更难。如果我发现更多,我会更新。很高兴它有帮助。我仍然无法通过用户点击打开android上sys浏览器中的链接。如果您正在尝试电子邮件链接,那么只需使用普通html中使用的mailto,这对于打开本机电子邮件应用程序非常有效。此外,iframe还可以用我的代码加载其他网站,但在我尝试这样做时没有加载facebook。@Emiam我在android上使用相同的方法在iframe中打开链接,并且成功了。你面临的确切问题是什么?上次我从你的评论中漏掉了这一点。@Gallwynmasc iframe的宽度和高度不能用百分比表示。我根据你的代码片段成功截获了对iOS的点击。那部分就完成了。现在我仍然需要在安卓上解决这个问题。由于iFrame内的链接似乎根本不起作用,Android上的操作似乎更难。如果我发现了,我会更新的