【发布时间】:2014-02-11 08:22:22
【问题描述】:
我正在构建一个使用 InAppBrowser 的应用程序。在某些时候,用户可以在此窗口中单击外部链接。我尝试了不同的方法,但似乎都没有一个很好的工作结果。
目前最好的解决方案是监听loadstart事件(As described here):
app.browser.addEventListener('loadstart', function (inAppBrowser) {
if(inAppBrowser.url.match(/domain\.com/) === null) {
var url = inAppBrowser.url;
window.open(url, "_system");
}
}
这会在新窗口中打开链接,但也会在原始 InAppBrowser 中打开。这个活动可以取消吗?或者我可以尝试其他方法吗?
我已经尝试了以下方法:
- Cross window communication。
- 通过executeScript 方法插入
history.back(-1)。 - 在 InAppBrowser 中调用
window.open(url, '_system');。
这是针对 iOS 的。
编辑:
我最终在platforms/ios/APPNAME/Plugins/org.apache.cordova.inappbrowser/CDVInAppBrowser.m 中添加了这段代码:
NSString *domainStr = [NSString stringWithFormat:@"domain.com"];
NSString *urlStr = [NSString stringWithFormat:@"%@", request.URL];
NSRange result = [urlStr rangeOfString:domainStr];
if(result.location == NSNotFound) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlStr]];
return NO;
}
以上代码:
return [self.navigationDelegate webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];
【问题讨论】:
-
我不太明白你的问题,InAppBrowser 是用来浏览外部链接的。为什么不希望用户使用 InAppBrowser 进行导航?
-
InAppBrowser 打开一个外部网站,但该网站也有外部链接。我想在本机浏览器中打开该链接,因为该应用程序没有附带网站的一部分。
-
如果链接不是应用程序附带的网站的一部分,为什么要显示它们?不管怎样,我要告诉你一些选择
标签: ios cordova inappbrowser