在构建之间(我不确定触发了什么更改),应用程序在iOS中从以下行为开始。
index.html
,并且其中包含许多锚点的iframe index.html
要:
index.html
,并且其中包含许多锚点的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,看看这是否可能是一个错误,而不是一个功能。
答案 0 :(得分:2)
我正在面对这个问题我现在正在使用的新应用程序,似乎与Cordova iOS中的新白名单模式有关&gt; 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参数进行配置,但是对我们来说这个解决方法现在已经足够了。