브라우저에서 phonegap 열기 링크


114
<a target="_blank" data-rel="external" href="http://www.kidzout.com">www.kidzout.com</a>

안녕하세요 전문가 저는 phonegap 2.9.0을 사용하고 있으며 위의 코드를 사용하여 브라우저에서 링크를 열고 있지만 동일한 앱에서 열립니다 ... 어떻게 사파리 브라우저를 열 수 있습니까?

같은 앱에서 웹 사이트가 열리고 다시 돌아올 수 없어서 앱을 삭제하고 다시 설치해야합니다 .....


_blank외부 브라우저와 _selfWebView 로 열려면 Cordova 5.1.1에 대한 2015 솔루션을 확인하십시오. stackoverflow.com/a/32227524/82609
Sebastien Lorber

유사한 질문에 대한 답변도 참조하십시오 : stackoverflow.com/a/26176013/1480587stackoverflow.com/a/46619378/1480587
Peter T.

답변:


225

유사한 질문 에서 제안한 대로 InAppBrowser 설명서에 따라 JavaScript를 사용 window.open하여 target인수를로 설정하여 호출 합니다 ._system

<a href="#" onclick="window.open('http://www.kidzout.com', '_system'); return false;">www.kidzout.com</a>

더 좋고 더 유연한 솔루션은 모든 링크의 click이벤트 를 가로 채고 window.open링크의 속성에서 읽은 인수로 호출 하는 것이지만 작동 합니다.

이 작업을 수행하려면 InAppBrowser 플러그인을 설치해야합니다.

cordova plugin add cordova-plugin-inappbrowser

3
네, 나도 코르도바 1.7.0에서 동일한 target = "_ blank"를 사용했지만 지금은 2.9.0으로 작업하고 있는데 짜증이납니다. 귀하의 sujjestion도 작동하지 않습니다 ...... :(
ahsan ali

6
그래 나도 시도했고 공유 한 링크도 따라 갔다. 도움을 주셔서 감사합니다.하지만 여전히 문제가 있습니다. 사이트는 여전히 앱에서 열리고 있습니다 ...... :(
ahsan ali

안녕 아산, 당신의 문제가 무엇인지 자세히 설명해 주시겠습니까? 나는 같은 문제가 있다고 생각합니다.
whossname

3
이 기능을 사용하려면 InAppBrowser 플러그인을 설치해야합니다. 지침은 다음과 같습니다. cordova.apache.org/docs/en/3.0.0/…
jackocnr

7
나는 같은 문제가있다 .. 해결책이 작동하지 않는다 :( 그것은 (안드로이드에서) 일반 링크처럼 열립니다
Daniel

30

다른 게시물에서 답변했듯이 플랫폼마다 두 가지 옵션이 있습니다. 내가하는 일은 :

document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() {

    // Mock device.platform property if not available
    if (!window.device) {
        window.device = { platform: 'Browser' };
    }

    handleExternalURLs();
}

function handleExternalURLs() {
    // Handle click events for all external URLs
    if (device.platform.toUpperCase() === 'ANDROID') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            navigator.app.loadUrl(url, { openExternal: true });
            e.preventDefault();
        });
    }
    else if (device.platform.toUpperCase() === 'IOS') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            window.open(url, '_system');
            e.preventDefault();
        });
    }
    else {
        // Leave standard behaviour
    }
}

보시다시피 장치 플랫폼을 확인하고 있으며 이에 따라 다른 방법을 사용하고 있습니다. 표준 브라우저의 경우 표준 동작을 그대로 둡니다. 이제부터 솔루션은 Android, iOS 및 브라우저에서 잘 작동하지만 HTML 페이지는 변경되지 않으므로 URL을 표준 앵커로 표시 할 수 있습니다.

<a href="http://stackoverflow.com">

솔루션에는 InAppBrowser 및 장치 플러그인이 필요합니다.


훌륭한 대답입니다. 다른 사람들을위한 것이 아니라면 www / cordova_plugins.js에 장치와 inappbrowser 구성이 모두 포함되어 있는지 확인하십시오. 플러그인을 설치할 때 js 및 플러그인 구성이 기본 작업 www 폴더가 아닌 스테이징 폴더에 추가됩니다. 구성과 위치를 정리하면 완벽하게 작동했습니다.
Michael Bordash 2014

1
이것이 최고의 답변입니다! 다음을 통해 InAppBrowser 플러그인을 설치하지 않았 음을 기억하십시오.$ meteor add cordova:org.apache.cordova.inappbrowser@0.5.4
tixastronauta

스 니펫에 기여하고 싶은 사람이 있으면 요점에 업로드했습니다. gist.github.com/redolent/e79722b32a48a536b5ba
연상

28
<a onclick="navigator.app.loadUrl('https://google.com/', { openExternal:true });">Link</a>

Android 및 PG 3.0에서 나를 위해 작동합니다.


Android 2.3.7 및 4.2.2 모두에서 여전히 실패하는 것 같습니다.
user569825 23:04에

2
Cordova 3.3.0이 설치된 Android 4.4.2에서 나를 위해 작동합니다. 그러나 iOS 6.1에서는 작동하지 않습니다.
mytharcher

코르도바 3.3.0, 감사합니다.이 정보는 어디서 얻었습니까? 문서에서 찾을 수 없습니다.
Teoman shipahi 2014

이것은 cordova 3.4.1 및 android 4.2에서 저에게 효과적이었습니다. 플러그인이 필요하지 않았습니다. iOS7에서 테스트 한 후 다시보고하겠습니다.
pgsandstrom

이것은 안드로이드에서 나를 위해 일한 유일한 솔루션입니다. 감사합니다
Niraj Chauhan

21

Android 및 iPhone에서 URL을 여는 방법에는 두 가지가 있습니다.

IOS의 경우 다음 코드를 사용하십시오.

window.open("http://google.com", '_system');

그리고 안드로이드 OS의 경우 다음 코드를 사용하십시오.

navigator.app.loadUrl("http://google.com", {openExternal : true});

Cordova도 사용할 수 있습니다 window.open("http://google.com", '_system'). URL에서 navigator.app.loadUrl작동하지 않으므로을 사용해서는 안됩니다 market://.이 경우 앱을 닫고 동일한 창에서 열립니다. 항상 바람직하지는 않습니다.
Agamemnus 2014 년

1
Agamemnus, window.open이 내 phonegap 3.6 응용 프로그램의 Android에서 작동하지 않습니다. 이 답변의 솔루션을 사용해야 작동합니다.
Moulde

10

마침내이 게시물은 iOS에서 도움이되었습니다 : http://www.excellentwebworld.com/phonegap-open-a-link-in-safari-or-external-browser/ .

"CDVwebviewDelegate.m"파일을 열고 "shouldStartLoadWithRequest"를 검색 한 다음 함수 시작 부분에 다음 코드를 추가합니다.

if([[NSString stringWithFormat:@"%@",request.URL] rangeOfString:@"file"].location== NSNotFound) {
    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}

navigator.app.loadUrl("http://google.com", {openExternal : true});Android 용으로 사용하면서 OK입니다.

Cordova 3.3.0을 통해.


이것은 3.0.0에서 나를 위해 일한 유일한 것입니다. 감사합니다!!
Rocklan

3.0에서는 InAppBrowser 플러그인을 포함해야합니다. 그러나 이상하게 보일 수 있습니다.
Sean Bannister 2014

MainViewController.m에서 위의 한 레이어를 변경합니다.-(BOOL) webView : (UIWebView *) theWebView shouldStartLoadWithRequest : (NSURLRequest *) request navigationType : (UIWebViewNavigationType) navigationType {NSURL * url = [request URL]; if ([[URL 체계] isEqualToString : @ "file"] || [[URL 체계] isEqualToString : @ "gap"]) {return [super webView : theWebView shouldStartLoadWithRequest : request navigationType : navigationType]; } else {[[UIApplication sharedApplication] openURL : url]; 반환 NO; }}
Gamadril

10

이러한 답변 중 어느 것도 각 플랫폼에서 외부 링크를 열 수있을만큼 명시 적이 지 않습니다. 당으로 inAppBrowser 워드 프로세서 :

설치

cordova plugin add cordova-plugin-inappbrowser

window.open 덮어 쓰기 (선택 사항이지만 단순화를 위해 권장 됨)

window.open = cordova.InAppBrowser.open;

덮어 쓰지 않으면 window.open네이티브 window.open함수를 사용하게되며 플랫폼 간 동일한 결과를 기대할 수 없습니다.

기본 브라우저에서 링크를 열 때 사용

window.open(your_href_value, '_system');

inAppBrowser의 대상이 (플러그인 이름이 사용되어야하는 제안 것입니다)라고 주 '_blank'대신에, '_system'.


위의 단계가 없으면 기본 브라우저 앱 크로스 플랫폼에서 링크를 열 수 없습니다.

추가 크레딧

다음은 링크에 대한 (실시간) 클릭 핸들러의 예입니다.

document.addEventListener('click', function (e) {
    if (e.target.tagName === 'A' &&
        e.target.href.match(/^https?:\/\//)) {
        e.preventDefault();
        window.open(e.target.href, '_system');
    }
});

window.open을 정확히 어디에 재정의합니까? 웹 사이트 또는 코르도바 앱에서
Ellisan

index.html 페이지 (도움이되는 경우 귀하의 웹 사이트)에로드하는 JavaScript 파일의 상단이 바람직합니다.
bozdoz

7

jQuery가 있으면 다음과 같이 링크 클릭을 가로 챌 수 있습니다.

$(document).on('click', 'a', function (event) {
    event.preventDefault();
    window.open($(this).attr('href'), '_system');
    return false;
});

이렇게하면 html의 링크를 수정할 필요가 없으므로 많은 시간을 절약 할 수 있습니다. 저는 델리게이트를 사용하여 설정했습니다. 그래서 두 번째 인자로 'a'태그를 사용하여 문서 객체에 묶여있는 것을 볼 수 있습니다. 이렇게하면 추가 된시기에 관계없이 모든 'a'태그가 처리됩니다.

물론 InAppBrowser 플러그인을 설치해야합니다.

cordova plugin add org.apache.cordova.inappbrowser

이것은 내가 사용할 좋은 아이디어이지만 직접 window.open 호출도 처리해야합니다 (모든 것이 링크를 통해 전달되는 것은 아님)
Sebastien Lorber

3
window.open('http://www.kidzout.com', '_system');

작동하지만 inappbrowser 플러그인이 설치된 경우에만 작동합니다. 설치하려면 터미널을 사용하여 프로젝트에서 www 폴더로 이동하고 다음을 입력합니다.

phonegap plugin add org.apache.cordova.inappbrowser

또는

cordova plugin add org.apache.cordova.inappbrowser

그러면 브라우저에서 링크가 열립니다.


명령 phonegap local <command>이 DEPRECATED되었습니다. 명령이에 위임되었습니다 phonegap <command>. 이 명령 phonegap local <command>은 곧 제거됩니다.
Ajay Suwalka 2014

나는 과거에는 모르지만 요즘에는이 플러그인을 설치하는 올바른 방법은 cordova plugin add cordova-plugin-inappbrowser.
Plinio FM

2

Cordova 5.0 이상에서는 플러그인 InAppBrowser가 Cordova 플러그인 레지스트리에서 이름이 변경되었으므로 다음을 사용하여 설치해야합니다.

cordova plugin add cordova-plugin-inappbrowser --save

그런 다음

<a href="#" onclick="window.open('http://www.kidzout.com', '_system');">www.kidzout.com</a>


1

iOS에 중점을 둔 PhoneGap Build (v3.4.0)를 사용하고 있으며 InAppBrowser 플러그인을 인식하려면 PhoneGap 용 config.xml에이 항목이 있어야했습니다.

<gap:plugin name="org.apache.cordova.inappbrowser" />

그 후 window.open (url, target) 사용은 여기에 설명 된대로 예상대로 작동 합니다 .


1
나는 m also using PhoneGap Build (v3.5.x) and added the plugin via the config.xml. But what i get is an InAppBrowser without controls an cannot call the safari browser. I단지 window.open ()을 사용하고 있습니다. 어떤 충고?
Reinos 2014-08-22

올바르게 설정되어 있으면 window.open이 작동합니다. 제 상황에서 window.open은 다른 브라우저 URL을 열고 정상적으로 작동합니다. URL이 올바른지 확인하십시오.
contactmatt 2014-08-22

방금 Phonegap Build로이 작업을 시도했습니다. "지원되지 않는 플러그인 : org.apache.cordova.inappbrowser"
David Ball

1

또한 링크가 브라우저에서 열리지 않는 문제에 직면했습니다.

1 :이 Cordova 플러그인을 설치합니다.

cordova plugin add cordova-plugin-inappbrowser

2 : 다음과 같이 html에 열린 링크를 추가하십시오.

<a href="#" onclick="window.open('https://www.google.com/', '_system', 'location=yes');" >Google</a>

3 : 이것은 내가 많은 문제에 직면했기 때문에 가장 중요한 단계입니다. cordova.js파일을 다운로드 하고 www폴더에 붙여 넣습니다 . 그런 다음 index.html파일 에서이를 참조 하십시오.

<script src="cordova.js"></script>

이 솔루션은 Android 및 iPhone 환경 모두에서 작동합니다.


-2

이렇게 :

<a href="#" onclick="window.open('https://www.nbatou.com', '_system'); return false;">https://www.nbatou.com</a>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.