Cordova 为什么iFrame中的链接在system safari中打开?
在构建之间(我不确定是什么改变了触发了这一点),一个应用程序在iOS中发生了以下行为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
- 主webview加载
,并有一个iframe,其中有许多锚定index.html
- 锚定将留在iFrame中,除非使用运行于
index.html
- 主webview加载
,并有一个iframe,其中有许多锚定index.html
- 单击iFrame内的任何定位点或触发位置更改的任何操作都会导致新页面加载到Safari应用程序中,而不是加载到iFrame内
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构建它会导致这个问题。看来我至少已经找到了解决问题的方法。