La respuesta podría ser un rotundo no, pero pensé en preguntar de todos modos. Me doy cuenta de que esto podría ser una pesadilla de seguridad.
Creé la siguiente página de prueba que verifica si el usuario está usando o no un navegador en la aplicación y muestra un enlace en consecuencia.
Cuando el usuario usa un navegador en la aplicación, estoy mostrando el enlace "continuar aquí" y me gustaría que se le pida que elija abrir el enlace en el navegador predeterminado de su móvil en lugar del navegador en la aplicación que está usando actualmente.
<html> <body> <a id="btn" href="#" onclick="window.open('https://www.google.com', '_system'); return false;">Continue here</a> <a id="btn2">not in app browser</a> </body> </html> <script> webviewCheck(); function webviewCheck() { let standalone = window.navigator.standalone, userAgent = window.navigator.userAgent.toLowerCase(), safari = /safari/.test(userAgent), ios = /iphone|ipod|ipad/.test(userAgent); if (ios) { if (!standalone && safari) { // Safari console.log("safari browser is being used"); document.getElementById("btn").hidden=true; } else if (!standalone && !safari) { // iOS webview console.log("IOS webview is being used"); document.getElementById("btn2").hidden=true; }; } else { if (userAgent.includes('wv')) { // Android webview console.log("Android webview is being used"); document.getElementById("btn2").hidden=true; } else { // Chrome console.log("Other browser is being used (firefox/chrome/edge/etc)"); document.getElementById("btn").hidden=true; } }; } </script>tal vez esto pueda ser útil . ¿Puedo crear un vínculo que se abra en mi aplicación si está instalada y, de lo contrario, retroceder a una URL diferente?
function openLink () { var appWindow = window.open("ourapp://www.ourdomain.com/files/12345","_blank"); setTimeout( function () {if (appWindow) { appWindow.location ="http://www.ourdomain.com/buyourapp"; } },1000); }Esto debería forzar el navegador del sistema en Android/iOS:
window.open(url, '_system');Pero esto también continuará usando el navegador del sistema cuando se ejecute en el navegador del sistema, por lo que no estoy seguro de por qué desea distinguir esos casos.
Sí, es muy posible si el usuario ha iniciado sesión. Deberá crear una columna de base de datos de tal vez un campo booleano.
can_open_url = Falso
Siempre que el usuario realice la acción, le permitirá tocar su base de datos y actualizar su archivo,
can_open_url = Verdadero
Con la ayuda de ajax o fetch, puede activar la función en su (código de back-end) con el gesto del usuario en el navegador y preguntar si el campo es Verdadero, algo como esto:
if(can_open_url === true){ window.location.href = '/my_url/'; or if(window.location.href != "/my_url/"){ window.location.replace("/my_url"); }o aún puede abrir una nueva ventana como lo hizo. Luego, vuelva a actualizar el campo booleano a su valor formal después de una manipulación exitosa.
La transacción principal tendrá lugar en su backend, porque deberá conocer todos los navegadores en los que el usuario ha iniciado sesión y con eso puede consultar en el que se abrirá la URL para el usuario.
No sé el backend que estás usando. Si especifica su backend, aún puedo darle más mano sobre una forma de hacerlo, solo si cree que la respuesta puede ser útil.