2013-02-02 4 views
2

나는 Sencha Touch 2 및 Cordova 2.3.0을 사용하여 모바일 앱을 개발 중입니다. 동적으로로드 된 HTML의 모든 외부 링크를 새 InAppBrowser로 열 수 있기를 원합니다.PhoneGap/Cordova 2.3 : InAppBrowser에서 모든 외부 링크를 여는 방법은 무엇입니까?

target = "_ blank"를 포함하는 모든 외부 링크를 수정하지 않고도이를 수행 할 수 있습니까?

InAppBrowser의 window.open API를 사용하여 외부 링크의 클릭을 가로 채고 싶습니다. iOS와 Android를 대상으로하기 때문에 자바 스크립트 솔루션이 별도의 코드 (Java 및 Objective-C)를 피하는 것이 좋습니다.

감사합니다.

업데이트 : 난 그냥 이걸 발견 : https://gist.github.com/4694032

이 가진 유일한 문제는 내가 내 응용 프로그램에서 jQuery를 사용하지 않는 것입니다. 이 문제를 위해 그것을 포함시키는 것이 가치가 있습니까?

Ext.Viewport.element.dom.addEventListener('click', function (e) { 
    if (e.target.tagName !== 'A') { 
     return; 
    }; 

    var url = e.target.getAttribute('href'); 
    var containsHttp = new RegExp('http\\b'); 

    //if href value begins with 'http' 
    if(containsHttp.test(url)) { 
     e.preventDefault(); 
     window.open(url, "_system"); // For iOS 
     navigator.app.loadUrl(url, {openExternal: true}); //For Android 
    } 
    else { 
     return; 
    } 
}, false); 

이 그럼 당신은 같은 시간에 안드로이드 및 iOS 용 구축 할 수 있습니다 : 정규 표현식을 사용하여, "HTTP"로 시작

+0

아니, 그만한 가치가 없습니다. 스크립트를 쉽게 변환 할 수 있어야합니다. Btw 만약 당신이 대답 pls 외부 사이트에서 코드를 인용 답변을 찾았습니다. –

+0

감사합니다. 나는 Google을 통해 게시 한 링크를 찾았으므로 그 링크를 찾지 못했습니다. – borck

답변

3
Ext.each(Ext.query('a'), function(el) { 
    el = Ext.get(el); 
    el.on('click', function(e) { 
     e.preventDefault(); 
     console.log('clicked', el.getAttribute('href')); 
    }); 
}); 
+0

잘 작동하지만 문제가 여전히 있습니다. 내 애플 리케이션은 다른 사람들과 상점을 채우기 위해 PHP 스크립트에 연결, 표시 할 HTML 데이터는 애플 리케이션의 여러 페이지입니다. 현재 페이지에 표시된 요소뿐만 아니라 ''요소를 모두 하나의 쿼리로 가져올 수 있습니까? 다시 말해 앱의 모든 외부 링크를 한 번에 쿼리 할 수 ​​있습니까? – borck

+1

그럴 경우, 이것은 당신을 위해 작동합니다 : http://stackoverflow.com/a/13567152/273985 – rdougan

+0

정확히 내가 뭘 찾고 있었는지, 많이 고마워! – borck

1

또한 특성 (HREF) 전용이 이벤트를 추가 할 수 있습니다.