javascript에서 URL 체계가 지원되는지 확인
URL 스키마가 현재 휴대폰에 등록되어 있는지 확인하는 방법이 있습니까? 자바 스크립트로?
아니요, 웹 페이지가 아닙니다.
원활하지 않습니다. 그러나 팝업이 차단되었는지 여부를 확인하는 것과 유사한 방법이 있습니다.
지원되지 않는 URL 체계를 시도하면 Safari는 사용자에게 무엇을해야할지 모르고 동일한 페이지에 머무른다는 경고를 표시합니다.
따라서 앱 호출에 활성화 할 시간을 제공했다면 300ms라고 말한 다음 계획이없는 경우 다른 작업을 수행하십시오.
가장 예쁘지는 않지만 작동합니다.
function startIThrown(){
document.location = 'ithrown://restart';
setTimeout(function(){
if(confirm('You do not seem to have iThrown installed, do you want to go download it now?')){
document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6';
}
}, 300);
}
<a href="#" onclick="startIThrown()">Restart iThrown</a>
다음은 앱에서 돌아올 때 팝업을 표시하지 않는 솔루션입니다. 400ms 이상 이동했다고 가정합니다.
function startiThrown() {
document.location = appurl;
var time = (new Date()).getTime();
setTimeout(function(){
var now = (new Date()).getTime();
if((now - time)<400) {
if(confirm('You do not seem to have iThrown installed, do you want to go download it now?')){
document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6';
}
}
}, 300);
}
pagehide
시스템 시간에 의존하는 것보다 이벤트가 더 강력하다는 것을 알았 습니다. 비 jQuery 호의를 선호하는 사람들을 위해 다음은 스 니펫입니다.
var appurl = 'custom://url';
var appstore = 'https://itunes.apple.com/us/app/your-app';
var timeout;
function preventPopup() {
clearTimeout(timeout);
timeout = null;
window.removeEventListener('pagehide', preventPopup);
}
function startApp() {
window.location = appurl;
timeout = setTimeout(function(){
if(confirm('You do not seem to have the App installed, do you want to go download it now?')){
document.location = appstore;
}
}, 1000);
window.addEventListener('pagehide', preventPopup);
}
또 다른 훌륭한 (적어도 최신 브라우저 버전에서 작동) 해결 방법은 짧은 시간 초과 후 브라우저 창에 포커스가 있는지 확인하는 것입니다. 이렇게하면 URI 체계가 작동하지 않은 경우에만 사용자에게 대화 상자를 표시 할 수 있습니다.
HTML :
<a class="uri-link" data-uri="qobuzapp://" href="#">URI</a>
자바 스크립트 (여기에서 jQuery 사용) :
var windowHasFocus;
$(window).focus(function() {
windowHasFocus = true;
}).blur(function() {
windowHasFocus = false;
});
function goToUri(uri) {
window.location = uri;
setTimeout(function(){
if (windowHasFocus) {
if (confirm('You do not seem to have Qobuz installed, do you want to go download it now?')){
window.location = 'http://www.qobuz.com';
}
}
}, 100);
}
$('a').on('click', function(){
goToUri($(this).data('uri'));
});
다음은 작동하는 jsFiddle입니다. 자신의 URI 스키마로 업데이트하십시오. http://jsfiddle.net/mF6TZ/
iOS 6.0부터 Apple은 우리 대부분이 찾고있는 것을 수행하는 스마트 앱 배너를 선보였습니다.
- 앱이 설치되지 않은 경우 App Store로 보냅니다.
- app-argument 매개 변수를 사용하여 특정 딥 링크로 앱을 엽니 다.
다음 메타 태그를 포함합니다.
<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">
여기에서 가져온 것 : Safari 웹 콘텐츠 가이드
Here is a variation on the previous 2 solutions. It will create a link that can be opened in Google Chrome. If it fails it opens the link using http
<script>
function checkChrome(h){
document.location=h;
var time = (new Date()).getTime();
setTimeout(function(){
var now = (new Date()).getTime();
if((now-time)<400) {
if(confirm('Missing Chrome. Download it now?')){
document.location = 'http://itunes.apple.com/us/app/chrome/id535886823?mt=8';
} else {
document.location=h.replace('googlechrome','http');
}
}
}, 300);
}
</script>
<a href="googlechrome://www.google.com" onclick="checkChrome(this.href);return false;">Open Google with Chrome</a>
This is based on the answer of mrahman. As noted, by JoshNaro new Date() gives back a wrong date when called inside the timeout. Tests suggest that the date is not updated in threads that are started before the app is deactivated.
A further ugly setTimeout called after activation will create a new thread with the current date.
This was tested on iOS 8.
function startiThrown() {
document.location = appurl;
var time = (new Date()).getTime();
setTimeout(function(){
setTimeout(function(){ // <-- start new thread after activation
var now = (new Date()).getTime();
if((now - time)<400) {
if(confirm('You do not seem to have iThrown installed, do you want to go download it now?')){
document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6';
}
}
}, 10); // <-- start new thread after activation
}, 300);
}
I try to use just the 'pagehide' event, but then it not work into Firefox. I created this version here http://jsfiddle.net/thiagomata/6tvoc4f1/2/ what works in Firefox, Google Chrome and Safari. I have not tested in Internet Explorer yet.
One thing what was necessary to make it work into Firefox, was use Iframe to set the src. This allows me to call the app without leaving my page.
<a class="uri-link" href="#"
data-uri-app="myapp://"
data-url-app-not-found="http://www.google.com?q=not-found-link"
>
Example 1
</a>
<a class="uri-link" href="#"
data-uri-app="myapp://"
data-url-app-not-found="http://www.google.com?q=not-found-link"
data-url-app-found="http://www.google.com?q=found-link"
>
Example 2
</a>
<a class="uri-link" href="#"
data-uri-app="notexists://"
data-url-app-not-found="http://www.google.com?q=not-exists"
>
Example 3
</a>
<iframe id="callapp" style="display:none"></iframe>
I have this comment https://stackoverflow.com/a/18715513/49114 with a jQuery plugin to add alternative app link to regular links.
참고URL : https://stackoverflow.com/questions/627916/check-if-url-scheme-is-supported-in-javascript
'programing tip' 카테고리의 다른 글
Seaborn 상자 그림에 제목을 추가하는 방법 (0) | 2020.12.04 |
---|---|
Java에서 main ()이 무효 인 이유는 무엇입니까? (0) | 2020.12.04 |
Python 예외에 대한 모범 사례? (0) | 2020.12.04 |
이벤트 핸들러와 콜백의 차이점 (0) | 2020.12.04 |
jaxb 비 정렬 화 타임 스탬프 (0) | 2020.12.04 |