Conversión de document.write (screen.height) a number en coldfusion?

Estoy usando el siguiente código para recuperar la altura de la pantalla:

<CFSET rheight = "<script>document.write(screen.height);</script>"> 

El valor de rheight sale como 768, que es correcto.

Pero cuando hago esto: -:

 <CFSET sheight = rheight / 4> 

Obtuve el siguiente error:

El valor document.write (screen.height); no se puede convertir a un número.

La idea es get la altura de la pantalla en formatting numérico sin volver a cargar la página.

Hay varias maneras en que esto se puede hacer:

No AJAX

Sin utilizar ninguna request AJAX, podría lograr el resultado deseado utilizando el siguiente código (recién probado en CF 9.0.2 y CF10):

 <cfset rheight = " <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'> </script> <script> $(document).ready(function() { $('input.screenHeight').val(screen.height); alert($('input.screenHeight').val() / 4); }) </script>"> <cfhtmlhead text="#rheight#" /> <input type="text" class="screenHeight" /> 

En este ejemplo, estamos creando una variable de cadena que contiene una reference a la biblioteca jQuery Y su código personalizado para get la altura de la pantalla.

Estableceremos la altura como el valor de un cuadro de input de text. Entonces podemos extraer el valor y convertirlo en el número. Podría convertir el valor antes de colocarlo en el cuadro de input, de esta forma:

 $('input.screenHeight').val(screen.height/4); 

La variable de cadena se agrega al encabezado del documento con la label cfhtmlhead:

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7ae9.html

Esto solo funcionaría para la vista de página original. Si necesita get las dimensiones después de los cambios en la página o si cambia el layout de layout receptivo, deberá ejecutar una request de AJAX para recuperar las dimensiones de la pantalla.

Sin CFML

Por supuesto, no necesita usar ColdFusion en absoluto. Puede get la misma conversión de número solo de JavaScript:

 <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'> </script> <script type='text/javascript'> var getScreenHeight = function() { return screen.height; } $(document).ready(function() { var screenheight = getScreenHeight(); console.log(screenheight/4); }) </script> 

Sin embargo, parece que debe poder conservar el valor de la respuesta de altura de la pantalla en ColdFusion, así:

Con AJAX Y CFML

Al modificar el ejemplo anterior de JavaScript, podemos crear una request AJAX para publicar el valor de altura de la pantalla en una nueva página .cfm:

 <script type='text/javascript'> var getScreenHeight = function() { return screen.height; } $(document).ready(function() { var screenheight = getScreenHeight(); $.get("screensize.cfm", { screenheight: screenheight }, function(data) { console.log('screen height has been set in the session scope: ' + data); } ) }) </script> 

En su aspecto más básico, screensize.cfm podría include lo siguiente:

 <cfsetting showdebugoutput="false" /> <cfparam name="URL.screenheight" type="numeric" default="800" /> <cfset session.screenheight = URL.screenheight /> <cfoutput>#session.screenheight#</cfoutput> 

(Esto no incluye ninguna captura de validation o falla que deba include)

Suponiendo que su aplicación tiene habilitada la administración de sesiones, esto colocará el valor que envíe en el scope de SESSION para usarlo en toda la aplicación.

Una cosa para recordar aquí es que el valor en el scope de la SESIÓN no estará disponible para la página de llamada original (la que hizo la request de AJAX) hasta que se haya actualizado.

Espero que eso ayude.