>主webview加载index.html,并且有一个iframe,其中包含许多锚点
>锚定将保留在iFrame中,除非使用从index.html运行的JavaScript进行操作和重定向
至:
>主webview加载index.html,并且有一个iframe,其中包含许多锚点
>单击iFrame内的任何锚点或任何触发位置更改的操作都会导致新页面加载到Safari应用程序中而不是iFrame中
我安装了最新版本的cordova-plugin-inappbrowser(此时为1.3.0),但这似乎并没有干扰任何事情.
我已经验证我仍然可以使用index.html中的JavaScript来更改框架内锚点的属性,以及添加事件.
我使用以下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是动态设置的. 我已经在cordova上开了一个bug report,看看这可能是一个bug而不是一个功能.
我正在面对这个问题我现在正在使用的新应用程序,它似乎与Cordova iOS中的新白名单模式有关> 6.对于我们来说,我已经制定了允许在iframe内导航的解决方法(我不能确定它是否会产生任何其他问题,但是现在我们似乎没有任何人).在cordova项目中,在Private / Plugins / CDVUIWebViewEngine / CDVIntentAndNavigationFilter.m中,我们刚刚修改了shouldOverrideLoadWithRequest:navigationType:方法,改变了通过UIWebViewNavigationTypeLinkClicked请求导航时的行为.
使用新的Cordova行为,在这种情况下,它会停止导航,并在系统浏览器中打开它;我已经注释了那行([[UIApplication sharedApplication] openURL:url];)并修改了return,返回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]]]; }
我认为这个行为应该可以从config.xml参数配置,但对我们来说这个解决方法现在已经足够了.