我正在构建一个使用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中打开。是否可以取消此活动?或者我可以尝试其他方法吗?
我已经尝试过以下方法:
history.back(-1)
。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];
答案 0 :(得分:1)
你有一些选择:
添加一个loadstop侦听器,然后隐藏链接
app.browser.addEventListener('loadstop', hideLinks);
function hideLinks(){
app.browser.insertCSS({
code: "a { display: none; }"
}, function() {
console.log("Styles Altered");
});
}
shouldStartLoadWithRequest
方法return [self.navigationDelegate webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];
不属于您,则将NO
更改为URL