如何通过iframe中的链接打开新窗口

时间:2016-06-09 13:54:08

标签: cordova iframe anchor

我正在编写一个应用于android,ios和web的cordova应用程序。

在我使用iframe的应用程序中,我正在加载html页面(来自我们的服务器,如果需要我可以操作)。 所以我目前正在使用iframe:

<iframe sandbox="allow-scripts allow-same-origin allow-top-navigation" name="iframe" frameBorder="0" seamless="seamless" src="http://www.ourserver.com/file.html" />

在这些html文件中,我有链接,我想在新窗口中打开。我写了一个处理链接打开的函数,可以从iframe外部使用window.openLink(url)来访问。 知道如何在iframe中打开链接吗?

2 个答案:

答案 0 :(得分:2)

你可以有两种可能性:

  1. 该链接在应用内部的主应用窗口中打开, 全屏
  2. 链接在设备浏览器中全屏显示
  3. 在这两种情况下,您都应该使用inAppBrowser plugin

    seems,就实际情况而言,您无法打开指向iFrame的链接。

    以下是您的代码:

    $(document).ready(function () {
    
        document.addEventListener("deviceready", onDeviceReady, false);
        function onDeviceReady() {        
            window.open = cordova.InAppBrowser.open;
        }
    
    $(document).on('click', 'a[href^=http], a[href^=https]', function (e) {
            e.preventDefault();
            var $this = $(this),
                target = $this.data('inAppBrowser') || '_system'; // system open the device browser. _blank open inappbrowser
            window.open($this.attr('href'), target, 'location=no');
        });
    
    });
    

答案 1 :(得分:0)

我知道这个问题已经过时了,但是当我遇到类似问题时,无论如何我都会添加一个答案。

我们的问题是我们无法控制所呈现的iframe,因此无法进行必要的覆盖以使Zappescu的解决方案正常工作,因此我们最终扩展Cordova以处理请求打开的链接除了主框架之外的其他地方,而不是通过平台浏览器打开它们

我们的解决方案目前仅支持使用WKWebView的iOS,但其他平台应该有类似的解决方案。

我们做的主要是将我们自己的WKUIDelegate实例发送到WKWebView

[self.webViewEngine updateWithInfo:@{
    kCDVWebViewEngineWKUIDelegate : uiDelegate
}];

在该代理中,我们添加了createWebViewWithConfiguration来处理这些网址

- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
    if (!navigationAction.targetFrame.isMainFrame) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:navigationAction.request.URL.absoluteString]];
    }
    return nil;
}

实际的插件位于:https://github.com/trendsales/cordova-iframe-navigation

希望这可以作为面对这个问题的其他人的切入点