我在我的应用中嵌入了GoogleMap。 在嵌入式地图(这是一个iFrame)上,我有来自谷歌的链接:'term of use'。 当我点击链接(客户可以错误地做到这一点)时,它会在我的应用程序和全屏幕中打开页面。然后不可能回到应用程序!
所以我添加了Cordova插件InAppBrowser。我创建了一个小脚本来防止:
$("a").click(function(e) {
console.log("checking link");
var link = e.currentTarget.href;
var testURL = (link.indexOf("www") > (-1));
testURL |= (link.indexOf("http") > (-1));
testURL |= (link.indexOf(".com") > (-1));
testURL |= (link.indexOf(".fr") > (-1));
if (testURL) {/*if URL is external open in 'new window'*/
console.log("Prevent InApp URL FullScreen");
window.open(link, "_system");
}
});
它在页面上的经典链接上运行良好。 主要问题是谷歌地图是在iFrame中!这样我就无法访问jQuery中的元素和$(" a')。点击(.....)无法在iFrame Link上运行!
总结
我想要在Safari而不是我的应用程序中打开任何外部链接(http,wwww,.fr,.com,.org ...等)。或使用InAppBrowser插件,在我的应用程序中打开但不是全屏,以返回应用程序。
你有什么想法吗? 先谢谢你们。
答案 0 :(得分:4)
我找到了一个解决方案,这可能不是最好的解决方案,因为它只适用于iOs(当然可以扩展到android):
我在MainViewController.m中添加了这段代码:
- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType) navigationType
{ NSURL *url = [request URL];
//mustNotReroot : for the google iFrame, the adress contains "embed" ==> must not be open in safari but in the app
BOOL mustNotReroot = [url.path rangeOfString:@"embed"].location != NSNotFound;
// Intercept any external http requests and forward to Safari
// Otherwise forward to the PhoneGap WebView
if (([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"])&& !mustNotReroot)
{
NSLog(@"Rerouting to Safari %@",url);
[[UIApplication sharedApplication] openURL:url];
return NO;
}
else
{
return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}
}
这样任何http或https都会转发到Safari.app。请注意,因为iFrame被理解为外部链接(因为它是XSS iFrame),所以它在Safari中打开,所以我通过添加check mustNotReroot来完成修复。 iFrame网址为:https://www.google.com/maps/embed/v1/directions?key=MyAPI_Key&origin=Campbell&destination=Sunnyvale
因为它包含嵌入我检查它是否包含嵌入,如果是:不要转发到Safari。
如果你有一个更好的解决方案,比如在iOS和Android上工作的javascript修补程序随时可以分享它!