Cordova 为什么iFrame中的链接在system safari中打开?

Cordova 为什么iFrame中的链接在system safari中打开?,cordova,iframe,cordova-ios,Cordova,Iframe,Cordova Ios,在构建之间(我不确定是什么改变了触发了这一点),一个应用程序在iOS中发生了以下行为 主webview加载index.html,并有一个iframe,其中有许多锚定 锚定将留在iFrame中,除非使用运行于index.html 致: 主webview加载index.html,并有一个iframe,其中有许多锚定 单击iFrame内的任何定位点或触发位置更改的任何操作都会导致新页面加载到Safari应用程序中,而不是加载到iFrame内 我已经在AppBrowser中安装了最新版本的cor

在构建之间(我不确定是什么改变了触发了这一点),一个应用程序在iOS中发生了以下行为

  • 主webview加载
    index.html
    ,并有一个iframe,其中有许多锚定
  • 锚定将留在iFrame中,除非使用运行于
    index.html
致:

  • 主webview加载
    index.html
    ,并有一个iframe,其中有许多锚定
  • 单击iFrame内的任何定位点或触发位置更改的任何操作都会导致新页面加载到Safari应用程序中,而不是加载到iFrame内
我已经在AppBrowser中安装了最新版本的
cordova插件(目前为1.3.0),但这似乎没有任何影响

我已经验证了我仍然能够使用
index.html
中的JavaScript来更改框架内锚的属性,以及添加事件

我正在使用以下CSP:

我不确定这是否与此有关

我尝试了许多iframe沙盒属性,试图看看哪些属性会起作用,但它们都不会改变结果。目前位于:

iframe的
src
是动态设置的


我在cordova上打开了一个应用程序,看看这是否是一个潜在的bug而不是一个功能。

我在一个新的应用程序中遇到了这个问题,我现在正在工作,这似乎与cordova iOS>6中的新白名单模式有关。对于我们来说,我已经为iFrame内部的allow navigation做了一个变通方法(我不确定它是否会产生任何其他问题,但目前我们似乎还没有人)。 在cordova项目中,在
Private/Plugins/CDVUIWebViewEngine/CDVIntentAndNavigationFilter.m
上,我们刚刚修改了
shouldOverrideLoadWithRequest:navigationType:
方法,更改了通过
UIWebViewNavigationTypeLinkClicked
请求导航时的行为

使用新的Cordova行为,在这种情况下,它会停止导航,并在系统浏览器中打开它;我已经对该行(
[[UIApplication-sharedApplication]openURL:url];
)进行了注释,并将返回修改为
返回YES
;通过这两项更改,它与cordova的早期版本一样工作:

case UIWebViewNavigationTypeLinkClicked:
    // Note that the rejection strings will *only* print if
    // it's a link click (and url is not whitelisted by <allow-*>)
    if ([self.allowIntentsWhitelist URLIsAllowed:url logFailure:NO]) {
        // the url *is* in a <allow-intent> tag, push to the system
        //[[UIApplication sharedApplication] openURL:url];
        return YES;
    } else {
        [errorLogs addObject:[NSString stringWithFormat:allowIntents_whitelistRejectionFormatString, [url absoluteString]]];
    }
案例UIWebViewNavigationTypeLinkClicked:
//请注意,拒绝字符串将*仅*在以下情况下打印:
//这是一个链接点击(并且url不会被列入白名单)
if([self.allowinentswhitelist URLIsAllowed:url logFailure:NO]){
//url*在标记中,推送到系统
//[[UIApplication sharedApplication]openURL:url];
返回YES;
}否则{
[errorLogs addObject:[NSString stringWithFormat:AllowEvents_whitelistRejectionFormatString[url absoluteString]];
}

我认为这种行为应该可以通过config.xml参数进行配置,但对于我们来说,这种解决方法现在已经足够了。

您如何在应用程序中使用AppBrowser
中的
cordova插件?您是否正在强制使用所述的
inappbrowser
打开所有链接?我最初使用inappbrowser捕获某些链接点击并在
\u系统中手动打开它们
目标,但是我删除了代码和插件,问题依然存在。所以我用cordova ios 3.8.0重新构建了它,它可以正常工作,但是用cordova ios 4.1.1构建它会导致这个问题。看来我至少已经找到了解决问题的方法。