从InAppBrowser打开本机浏览器中的链接

时间:2014-02-11 08:22:22

标签: ios cordova inappbrowser

我正在构建一个使用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中打开。是否可以取消此活动?或者我可以尝试其他方法吗?

我已经尝试过以下方法:

这是针对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];

1 个答案:

答案 0 :(得分:1)

你有一些选择:

  • 隐藏将css注入inappbrowser的外部链接,如果它们没有出现,则无法点击

添加一个loadstop侦听器,然后隐藏链接

app.browser.addEventListener('loadstop', hideLinks);



function hideLinks(){
    app.browser.insertCSS({
                      code: "a { display: none; }"
                      }, function() {
                      console.log("Styles Altered");
                      });
}
  • 修改/子类inappbrowser,更改shouldStartLoadWithRequest方法
如果return [self.navigationDelegate webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];不属于您,则

NO更改为URL