valor - obtener parametros url javascript
Verifique si el esquema de URL es compatible en javascript (10)
A partir de iOS 6.0, Apple presentó los Smart App Banners, que hacen lo que la mayoría de nosotros busca:
- Enviar a App Store si la aplicación no está instalada.
- Abra la aplicación con un enlace profundo específico, utilizando el parámetro de argumento de la aplicación.
Incluye la siguiente metaetiqueta:
<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">
tomado de aquí: Safari Web Content Guide
¿Hay alguna manera de verificar si un esquema de URL está actualmente registrado en el teléfono ... con javascript?
Aquí hay una solución que no muestra la ventana emergente cuando vuelves de la aplicación, supone que has estado fuera más de 400 ms:
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);
}
Aquí hay una variación de las 2 soluciones anteriores. Creará un enlace que se puede abrir en Google Chrome. Si falla, abre el enlace usando 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>
Esto se basa en la respuesta de mrahman. Como se mencionó, por JoshNaro nueva Fecha () devuelve una fecha incorrecta cuando se llama dentro del tiempo de espera. Las pruebas sugieren que la fecha no se actualiza en los hilos que se inician antes de que se desactive la aplicación.
Otro feo setTimeout llamado después de la activación creará un nuevo hilo con la fecha actual.
Esto fue probado en 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);
}
Intento usar solo el evento ''pagehide'', pero luego no funciona en Firefox. Creé esta versión aquí http://jsfiddle.net/thiagomata/6tvoc4f1/2/ lo que funciona en Firefox, Google Chrome y Safari. Todavía no lo he probado en Internet Explorer.
Una cosa que era necesaria para hacer que funcione en Firefox, fue usar Iframe para configurar el src. Esto me permite llamar a la aplicación sin salir de mi página.
<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>
No a la perfección. Pero hay una manera similar a verificar si un pop-up fue bloqueado o no.
Cuando prueba un esquema de URL que no es compatible, Safari le advierte al usuario que no sabe qué hacer con él y se mantiene en la misma página.
Entonces, si le diste tu aplicación, llama en algún momento para activarla, digamos 300 ms, y luego haz algo más para responder a la inexistencia del esquema.
No es el más bonito, pero funciona:
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>
No, no desde una página web.
Otra gran solución (al menos para trabajar en las últimas versiones del navegador) es comprobar si la ventana del navegador tiene foco después de un corto tiempo de espera, de esta manera puede mostrar un cuadro de diálogo al usuario solo si el esquema URI no funcionó
HTML:
<a class="uri-link" data-uri="qobuzapp://" href="#">URI</a>
Javascript (usando jQuery aquí):
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''));
});
Aquí hay un jsFiddle en funcionamiento, simplemente actualícelo con su propio esquema de URI: http://jsfiddle.net/mF6TZ/
Tengo este comentario https://.com/a/18715513/49114 con un complemento jQuery para agregar un enlace de aplicación alternativo a los enlaces regulares.
pagehide
evento pagehide
más robusto que dependiendo del tiempo del sistema. Para aquellos de nosotros que prefiere un favor que no sea jQuery, aquí está el fragmento.
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);
}