2016-04-12 58 views
7

在构建之间(我不确定是什么改变触发这个),应用程序从iOS中的以下行为发展而来。为什么iFrame中的链接在系统Safari浏览器中打开?

  • 一个主要的WebView加载index.html,并具有在它有许多锚
  • 锚会留在iFrame中,除非另有操纵和与运行从index.html

为JavaScript重定向的iframe:

  • 一个主要的网络视图加载index.html,并有一个iframe中有很多锚点
  • 点击在Safari浏览器应用程序被加载触发新页面的位置变化导致的任何行动,而不是iFrame中的iframe内的任何锚

我有最新版本的cordova-plugin-inappbrowser( 1.3.0),但似乎没有任何干扰。

我核实,我仍然可以使用JavaScript从index.html改变属性有关框架内锚,以及添加事件。

我使用下列CSP:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval';">

我不确定是否有什么用它做。

我已经尝试了数iframe的沙箱属性,试图看到什么坚持,和他们没有改变结果。目前它在:

<iframe id="the-iframe" sandbox="allow-scripts allow-modals allow-popups allow-popups-to-escape-sandbox allow-top-navigation allow-forms allow-same-origin"></iframe>

iframe的src是动态设置的。

我已经在科尔多瓦开辟了bug report,看看这可能是一个错误,而不是一个功能。

+0

你如何在应用程序中使用'cordova-plugin-inappbrowser'?您是否可以强制所有链接使用'inappbrowser'打开,如[此处](https://github.com/apache/cordova-plugin-inappbrowser#installation)所述? – Dexter

+0

我最初使用inappbrowser捕获某些链接点击并手动在'_system'目标中打开它们,但删除了代码,插件和问题依然存在。 –

+0

所以我只是用cordova-ios 3.8.0重建了它,它没有问题,但是用cordova-ios 4.1.1构建它会导致这个问题。看起来我至少已经隔离了如何找出这个变化。 –

回答

2

我面临这个问题,现在我的工作一个新的应用程序,它似乎与科尔多瓦的iOS新白名单模式> 6。对于我们来说,我已经取得了让iframe内导航我一个解决方法(相关不能确定它是否会产生任何其他问题,但现在我们似乎没有人)。 科尔多瓦项目,在Private/Plugins/CDVUIWebViewEngine/CDVIntentAndNavigationFilter.m,我们刚刚修改了shouldOverrideLoadWithRequest:navigationType:方法,改变当通过UIWebViewNavigationTypeLinkClicked请求导航的行为。

有了新的科尔多瓦的行为,在这种情况下,它停止航行,并在系统浏览器中打开;我已评论该行([[UIApplication sharedApplication] openURL:url];)并修改了退货,至return YES;与此两个变化,它正在为科尔多瓦的早期版本:

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]]]; 
    } 

我认为这种行为应该是从config.xml中的参数配置,但是对于我们现在这个解决办法是不够的。

相关问题