sirve significa que para noopener javascript browser webview uiwebview feature-detection

javascript - para - rel noopener que significa



Característica detecta la apertura en una nueva ventana/pestaña(target=_blank) con JavaScript (2)

De acuerdo con mi investigación:

  • "WebView" puede deshabilitar "abrir enlaces en nuevas ventanas / pestañas".
  • WebView es utilizado por desarrolladores de aplicaciones nativas para mostrar páginas web dentro de su aplicación (ver la aplicación de Twitter).
  • La detección de WebView a través del agente de usuario no funciona de manera consistente y, de todos modos, no es una buena práctica.
  • Simplemente intentando abrir una nueva ventana con JS activadores de bloqueos emergentes; por lo que es una forma poco confiable para probar si se puede abrir una nueva ventana.

Necesito detectar cuando esta característica no está disponible. ¿Imposible?

Explicación adicional

Estoy tratando de detectar si puedo abrir una nueva ventana a través de target = _blank. Por ejemplo, UIWebView [en el navegador de la aplicación] puede evitar que target = _blank funcione como se espera [simplemente se abre en la misma ventana en lugar de en uno nuevo]. Necesito una solución para indicar cuándo no se puede abrir una nueva ventana debido a las limitaciones del navegador, como en el caso de UIWebView. Lamentablemente, los bloqueadores de ventanas emergentes impiden verificar dicha funcionalidad, ya que nunca permiten que se abra una nueva ventana sin la intervención del usuario (es decir, un clic).


Según OP Request lo he probado. Y funciona. Si el bloqueador de pop-ups está habilitado, lo veré y, por lo tanto, obtendré una forma confiable de saber que está habilitado. En este caso, solo estoy enviando una alerta, pero puedes hacer lo que quieras.

Aquí está el código:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Testing Pop-up Blocker</title> <script> function openPopUp(urlToOpen) { var popup_window=window.open(urlToOpen,"myWindow","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=yes, width=400, height=400"); try { popup_window.focus(); } catch (e) { alert("Pop-up Blocker is enabled! Please add this site to your exception list."); } } </script> </head> <body onload="openPopUp(''http://www.google.com''); return false;"> <p>Testing Pop-up Blocker</p> </body> </html>

Y esto es lo que obtuve, porque el bloqueador de pop-ups estaba habilitado.


No tendrá algo confiable al 100%.

Simplemente intentando abrir una nueva ventana con JS activadores de bloqueos emergentes; por lo que es una forma poco confiable para probar si se puede abrir una nueva ventana.

Tienes razón, no es absolutamente confiable ... window.open() está bloqueado (incluso con un truco como window.open(url, ''_blank'');window.focus(); ), click() también está bloqueado ( en un enlace que contiene target = "_ blank"), al igual que evt = document.createEvent("MouseEvents");evt.initEvent("click", true, true); ...

Pero de todos modos: si WebView no permite abrir un enlace en una nueva pestaña, entonces funcionará bien. Pero como está implicando una Webview puede autorizarlo. En este caso, no sabrá si está en una vista web o no. Es fácil detectar si un enlace abierto en una nueva pestaña finalmente se abrió en el mismo o no (puede probarse en javascript en un iframe no mostrado), pero si el enlace se abre en un navegador, no tiene forma de saberlo ( e imagina la experiencia del usuario con un código de JavaScript que abre una nueva pestaña en el navegador desde una aplicación ...). Como dijo Dave Alperovich, no se puede saber de antemano qué se bloqueará o no, sin haberlo intentado. Entonces no deberías mirar de ese lado.

No hay características o comportamientos confiables que diferencie una vista web de un navegador web . En una vista web tienes todo lo que obtienes en un navegador (cookies, WebStorage ...). El agente de usuario tiene sus imperfecciones, pero funcionará en muchos casos. Hay explicaciones aquí o aquí para construirlo.