Foros del Web » Programando para Internet » Javascript »

cómo pasar el valor de un "[object Promise]" a una variable?

Estas en el tema de cómo pasar el valor de un "[object Promise]" a una variable? en el foro de Javascript en Foros del Web. Busco obtener TODAS las fuentes que el navegador tiene disponibles. De NET tome éste código: Código: const getInstalledFonts = async () => { const { ...
  #1 (permalink)  
Antiguo 13/05/2021, 22:45
SLD
 
Fecha de Ingreso: diciembre-2013
Mensajes: 121
Antigüedad: 10 años, 3 meses
Puntos: 6
cómo pasar el valor de un "[object Promise]" a una variable?

Busco obtener TODAS las fuentes que el navegador tiene disponibles.

De NET tome éste código:
Código:
const getInstalledFonts = async () => {
	const { state } = await navigator.permissions.query({ name: "font-access" })
	if (state === "denied") {
		return []
		}
	const fonts = []
	try {
		for (const { family, fullName } of await navigator.fonts.query()) {
			fonts.push({ family, fullName })
			}
		} catch {}
	return fonts;
	}
que supuestamente retorna TODAS las fuentes del browser.

Pero no logro obtener la data:
Código:
function getFonts() {
	document.write('<pre>');
	Q = getInstalledFonts();
	document.write(Q);
	getInstalledFonts().then((fonts) => alert(fonts));
	}
</script>
<body onload="getFonts();">
Pueden indicarme cómo obtener la DATA por favor.

Gracias
  #2 (permalink)  
Antiguo 16/05/2021, 19:21
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: cómo pasar el valor de un "[object Promise]" a una variable?

La API de acceso a fuentes es una feature experimental, y por tanto no está soportada en Chrome a menos que la actives manualmente desde chrome://flags/#font-access. Debes ponerla en "Enabled" y reiniciar chrome. Depués comprobarás que sí te pide el permiso correctamente para acceder a tus fuentes, que deberás aceptar:

Código HTML:
<script>
const getInstalledFonts = async () => {
	const { state } = await navigator.permissions.query({ name: "font-access" })
	if (state === "denied") {
		return []
		}
	const fonts = []
	try {
		for (const { family, fullName } of await navigator.fonts.query()) {
			fonts.push({ family, fullName })
			}
		} catch {}
	return fonts;
}

function getFonts(){
    getInstalledFonts().then((res) => {
          console.log(res);
    })
}
</script>
<body onload="getFonts()"> 
Si abres la consola de tu navegador verás que efectivamente salen todas las fuentes que estás utilizando.

De todas formas, es un API no estándar que todavía no está implementada en la mayoría de navegadores.

Saludos

Última edición por prueba230683; 16/05/2021 a las 19:35
  #3 (permalink)  
Antiguo 28/05/2021, 15:08
SLD
 
Fecha de Ingreso: diciembre-2013
Mensajes: 121
Antigüedad: 10 años, 3 meses
Puntos: 6
Respuesta: cómo pasar el valor de un "[object Promise]" a una variable?

Gracias prueba230683.

Es posible utilizando JS obtener TODAS fuentes que el browser/cliente soporta?
  #4 (permalink)  
Antiguo 29/05/2021, 01:15
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: cómo pasar el valor de un "[object Promise]" a una variable?

Cita:
Es posible utilizando JS obtener TODAS fuentes que el browser/cliente soporta?
Encontré este código, que parece funcionar correctamente:

Código Javascript:
Ver original
  1. const fontCheck = new Set([
  2.   // Windows 10
  3. 'Arial', 'Arial Black', 'Bahnschrift', 'Calibri', 'Cambria', 'Cambria Math', 'Candara', 'Comic Sans MS', 'Consolas', 'Constantia', 'Corbel', 'Courier New', 'Ebrima', 'Franklin Gothic Medium', 'Gabriola', 'Gadugi', 'Georgia', 'HoloLens MDL2 Assets', 'Impact', 'Ink Free', 'Javanese Text', 'Leelawadee UI', 'Lucida Console', 'Lucida Sans Unicode', 'Malgun Gothic', 'Marlett', 'Microsoft Himalaya', 'Microsoft JhengHei', 'Microsoft New Tai Lue', 'Microsoft PhagsPa', 'Microsoft Sans Serif', 'Microsoft Tai Le', 'Microsoft YaHei', 'Microsoft Yi Baiti', 'MingLiU-ExtB', 'Mongolian Baiti', 'MS Gothic', 'MV Boli', 'Myanmar Text', 'Nirmala UI', 'Palatino Linotype', 'Segoe MDL2 Assets', 'Segoe Print', 'Segoe Script', 'Segoe UI', 'Segoe UI Historic', 'Segoe UI Emoji', 'Segoe UI Symbol', 'SimSun', 'Sitka', 'Sylfaen', 'Symbol', 'Tahoma', 'Times New Roman', 'Trebuchet MS', 'Verdana', 'Webdings', 'Wingdings', 'Yu Gothic',
  4.   // macOS
  5.   'American Typewriter', 'Andale Mono', 'Arial', 'Arial Black', 'Arial Narrow', 'Arial Rounded MT Bold', 'Arial Unicode MS', 'Avenir', 'Avenir Next', 'Avenir Next Condensed', 'Baskerville', 'Big Caslon', 'Bodoni 72', 'Bodoni 72 Oldstyle', 'Bodoni 72 Smallcaps', 'Bradley Hand', 'Brush Script MT', 'Chalkboard', 'Chalkboard SE', 'Chalkduster', 'Charter', 'Cochin', 'Comic Sans MS', 'Copperplate', 'Courier', 'Courier New', 'Didot', 'DIN Alternate', 'DIN Condensed', 'Futura', 'Geneva', 'Georgia', 'Gill Sans', 'Helvetica', 'Helvetica Neue', 'Herculanum', 'Hoefler Text', 'Impact', 'Lucida Grande', 'Luminari', 'Marker Felt', 'Menlo', 'Microsoft Sans Serif', 'Monaco', 'Noteworthy', 'Optima', 'Palatino', 'Papyrus', 'Phosphate', 'Rockwell', 'Savoye LET', 'SignPainter', 'Skia', 'Snell Roundhand', 'Tahoma', 'Times', 'Times New Roman', 'Trattatello', 'Trebuchet MS', 'Verdana', 'Zapfino',
  6. ].sort());
  7.  
  8. async function obtenerFuentes(){
  9.   await document.fonts.ready;
  10.  
  11.   const fontAvailable = new Set();
  12.  
  13.   for (const font of fontCheck.values()) {
  14.     if (document.fonts.check(`12px "${font}"`)) {
  15.       fontAvailable.add(font);
  16.     }
  17.   }
  18.  
  19.   return [...fontAvailable.values()];
  20. }
  21.  
  22. obtenerFuentes().then(fuentes => {
  23.   alert(fuentes);
  24. });

DEMO

  #5 (permalink)  
Antiguo 12/06/2021, 13:21
SLD
 
Fecha de Ingreso: diciembre-2013
Mensajes: 121
Antigüedad: 10 años, 3 meses
Puntos: 6
Respuesta: cómo pasar el valor de un "[object Promise]" a una variable?

Gracias prueba230683, en ése código nosotros "confirmamos" las FONT que coinciden con una LISTA PRE-DEFINIDA.

Sábes si es posible tomar el ARRAY de las fuentes que el cliente/BROWSER tiene instaladas SIN nosotros indicarlas?
  #6 (permalink)  
Antiguo 13/06/2021, 10:53
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: cómo pasar el valor de un "[object Promise]" a una variable?

Cita:
Sábes si es posible tomar el ARRAY de las fuentes que el cliente/BROWSER tiene instaladas SIN nosotros indicarlas?
Solamente existe esta forma, es decir, activando ese API experimental. El resto de formas son "hacks", que se basan en tener una lista grande de fuentes e ir comprobando una a una si el navegador las soporta.

De todas formas, con esa lista que proporcioné debería ser más que suficiente para detectar todas las posibles fuentes que un usuario puede tener, tanto en Win10 como en macOS.

  #7 (permalink)  
Antiguo 23/06/2021, 21:18
SLD
 
Fecha de Ingreso: diciembre-2013
Mensajes: 121
Antigüedad: 10 años, 3 meses
Puntos: 6
Respuesta: cómo pasar el valor de un "[object Promise]" a una variable?

Cita:
Iniciado por prueba230683 Ver Mensaje
...debería ser más que suficiente para detectar todas las posibles fuentes...
lo que quiero es crear un FiNGERPRINT basdo en la-S (sí, todas) las fuentes del visitante.

De ésa manera "no podrían" robar la COOKIE de sesión (PHP)
  #8 (permalink)  
Antiguo 24/06/2021, 12:07
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: cómo pasar el valor de un "[object Promise]" a una variable?

Cita:
lo que quiero es crear un FiNGERPRINT
Cita:
De ésa manera "no podrían" robar la COOKIE de sesión (PHP)
Si un atacante puede robar la cookie de sesión (por ejemplo mediante un XSS), también podrá fácilmente robar el fingerprint del usuario.

Es preferible hacer fingerprint a la IP del usuario. Es decir, asociar cada sesión con una única IP, para evitar robo de sesión.

Eso y verificar que la cookie de sesión tenga el attributo httponly.

  #9 (permalink)  
Antiguo 30/06/2021, 11:52
SLD
 
Fecha de Ingreso: diciembre-2013
Mensajes: 121
Antigüedad: 10 años, 3 meses
Puntos: 6
Respuesta: cómo pasar el valor de un "[object Promise]" a una variable?

Cita:
Iniciado por prueba230683 Ver Mensaje
Si un atacante puede robar la cookie de sesión (por ejemplo mediante un XSS), también podrá fácilmente robar el fingerprint del usuario.

Es preferible hacer fingerprint a la IP del usuario. Es decir, asociar cada sesión con una única IP, para evitar robo de sesión.

Eso y verificar que la cookie de sesión tenga el attributo httponly.

gracias por tu asesoria @prueba230683

Disculpa,
cómo puedo utilizar la IP remota en un salón de clases que utiliza la mísma IP pero diferentes computadores para ASEGURAR el fingerprint?

es en ése contexto que pretendo diferenciar cáda conexión.

Dáme una orientación, gracias
  #10 (permalink)  
Antiguo 30/06/2021, 17:04
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: cómo pasar el valor de un "[object Promise]" a una variable?

Si los ordenadores se encuentran en la misma red LAN que el servidor, podrías identificarlos por su dirección MAC. Aquí encontré un ejemplo de cómo extraer la dirección MAC con PHP:

Código PHP:
Ver original
  1. $ipAddress=$_SERVER['REMOTE_ADDR'];
  2. $macAddr=false;
  3.  
  4. #run the external command, break output into lines
  5. $arp=`arp -a $ipAddress`;
  6. $lines=explode("\n", $arp);
  7.  
  8. #look for the output line describing our IP address
  9. foreach($lines as $line)
  10. {
  11.    $cols=preg_split('/\s+/', trim($line));
  12.    if ($cols[0]==$ipAddress)
  13.    {
  14.        $macAddr=$cols[1];
  15.    }
  16. }
  17.  
  18. echo $macAddr;

Montar un servidor que sea accesible desde una red LAN es bastante sencillo. Cada ordenador en una red local tiene una IP local asignada (puedes ver la tuya con ipconfig). Solamente tendrías que montarte un localhost (por ejemplo, con XAMPP) y cambiar algunas cosas de la configuración para que otros usuarios de la red puedan conectarse a tu servidor local.

En cambio, si no es posible que el servidor se encuentre en la misma red que los clientes, entonces la única forma de identificar las conexiones es mediante sesiones (cookies de sesión, vaya).


Última edición por prueba230683; 30/06/2021 a las 17:24

Etiquetas: object, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:07.