2016-06-09 3 views
1

나는 안드로이드, ios 및 웹에서 사용할 수있는 코드 바 애플리케이션을 작성 중입니다.iframe 내의 링크로 새 창을 여는 방법

그 응용 프로그램에서 iframe을 사용하는 곳에서 (필요한 경우 조작 할 수있는 Google 서버에서) html 페이지를로드합니다. 그래서 나는 현재처럼은 iframe을 사용하고 있습니다 : 이러한 HTML 파일 내에서

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

, 나는 새 창에서 열기 싶은 링크를 가지고있다. 나는 iframe 외부에서 window.openLink(url)으로 접근 할 수있는 링크 열기를 처리하는 함수를 작성했습니다. iframe 내에서 링크를 어떻게 열 수 있습니까?

답변

1

당신은 두 가지 가능성이있을 수 :

  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'); 
    }); 

}); 
0

나는이 질문은 꽤 오래 알고,하지만 난 유사한 문제에 직면했다 나는 어쨌든 대답을 추가하고있다.

문제는 우리가 제공하는 iframe을 제어 할 수 없어서 Zappescu의 솔루션 작업을 수행하는 데 필요한 재정의 작업을 수행 할 수 없었기 때문에 대신 Cordova를 확장하여 Cordova를 확장하여 다른 곳에서 열기를 요청한 링크를 처리하지 못하게했습니다. 메인 프레임을 다르게하고 대신 플랫폼 브라우저를 통해 엽니 다.

우리의 솔루션은 현재 WKWebView을 사용하는 iOS 만 지원하지만 다른 플랫폼은 유사한 솔루션을 사용해야합니다.

우리가했던 중요한 것은 우리가 실제 플러그인이 여기에 해당 URL

- (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; 
} 

을 처리하는 createWebViewWithConfiguration을 추가 위양 WKWebView

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

에 그리고 내부에 우리 자신의 WKUIDelegate 인스턴스를 보낼 수 있었다 : https://github.com/trendsales/cordova-iframe-navigation

희망 사항은이 문제에 직면 한 다른 사람들의 진입 점이 될 수 있습니다.

관련 문제