2016-06-09 2 views
1

Я пишу приложение cordova, которое должно работать на Android, ios и в Интернете.Как открыть новое окно по ссылке в iframe

В стороне этого приложения я использую 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-файлов, у меня есть ссылки, которые я хотел бы, чтобы открыть в новом окне. Я написал функцию, которая обрабатывает открытие ссылки, которая может быть достигнута с window.openLink(url) за пределами iframe. Любая идея, как я могу открыть ссылку из iframe?

ответ

1

Вы могли бы иметь две возможности:

  1. ссылка открывается в главном окне приложения, внутри вашего приложения, полноэкранным
  2. ссылка откроется в браузере устройства, полноэкранный

В обоих случаях вы должны использовать 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'); 
    }); 

}); 
0

Я знаю, что этот вопрос является весьма устаревшим, но, как я столкнулся с аналогичной проблемой я добавляю ответ в любом случае.

Наша проблема заключалась в том, что мы не имели контроля над представленным iframe и поэтому не могли выполнить необходимые переопределения, чтобы сделать решение Zappescu, поэтому вместо этого мы закончили расширение Кордовы, чтобы обрабатывать ссылки, которые были запрошены для открытия в другом месте, кроме основной каркас по-разному и вместо этого открывать их, хотя браузер платформ

Наше решение в настоящее время поддерживает только iOS, используя WKWebView, но другие платформы должны иметь аналогичные решения.

Главное, что мы сделали, чтобы отправить свой собственный 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

Надеюсь, это может послужить отправной точкой для тех, кто сталкивается с этой проблемой.

Смежные вопросы