2010-02-23 9 views
8

Necesito hacer tanto como sea posible en el lado del cliente. En más detalles, me gustaría usar JavaScript para codificar una interfaz (que muestra información al usuario y que acepta y procesa la respuesta del usuario). Me gustaría usar el servicio web solo para tomar un archivo de fecha desde allí y luego enviar de vuelta un archivo de datos modificado. En este sentido, me gustaría saber si la siguiente es posible en JavaScript:¿Qué tan lejos puedo ir con JavaScript?

  1. Puede JavaScript leer el contenido de una página web externa? En otras palabras, en mi máquina local ejecuto JavaScript que lee el contenido de una página web determinada.

  2. ¿Pueden los valores de proceso de JavaScript rellenar un formulario HTML? En otras palabras, uso HTML y JavaScript para generar un formulario HTML. Se supone que el usuario debe completar el formulario y presionar el botón "Enviar". Luego, los datos deben enviarse al archivo HTML original (no a un servidor web). Entonces, esta información debe ser procesada por JavaScript.

  3. En el extremo final, JavaScript generará un archivo de datos local y deseo enviar este archivo a un servidor web PHP. ¿Puedo hacerlo con JavaScript?

  4. ¿Puedo iniciar una ejecución de un programa local desde JavaScript. Para ser más específico, el programa local está escrito en Python.

Agradeceré cualquier comentario y respuesta.

+1

"Tengo que hacer todo lo posible en el lado del cliente" - Fuera de interés, ¿por qué? –

+0

Paul, me gustaría programar un juego grupal. Y quiero tener dos versiones del juego (desde el punto de vista técnico). En el primer caso, el juego se basa en un enfoque P2P (utilizo Python para establecer una conexión entre computadoras). En el segundo caso, quiero usar un servidor web para jugar. Y no quiero hacer mi trabajo dos veces. Entonces, pensé que podía usar JavaScript para programar la interfaz de interacción. Y que puedo aplicar esta interfaz tanto para el enfoque P2P como para el servidor web (la única diferencia es cómo se obtuvieron los datos, pero los datos disponibles se muestran con el mismo código). – Roman

+0

Punto 4: configure la máquina para registrar un protocolo como "myap: //" o guarde un archivo y asocie la extensión con un programa. Cualquiera de ellos requiere configurar la máquina antes de ejecutar la aplicación. – LatinSuD

Respuesta

9
  1. Podría técnicamente, pero no puede en realidad debido a la same origin policy. Esto aplica tanto para leer como para escribir contenido externo. Lo mejor que puede hacer es cargar un iframe con una página de dominio diferente, pero no puede acceder a él mediante programación. Puede solucionar esto en IE, vea la respuesta de Andy E.

  2. Sí en la primera parte, mmmm no realmente para la segunda parte - se puede enviar un formulario a una página HTML y leer obtener argumentos que utilizan Javascript, pero es muy limitado (tamaño máximo recomendado de datos de alrededor de 1024 bytes) Probablemente deberías tener toda la inteligencia en una página.

  3. Puede generar un archivo localmente para que el usuario lo descargue usando Downloadify. No es posible generar un archivo y cargarlo en un servidor sin la interacción del usuario. No obstante, la generación de datos y su envío a un servidor como datos POST debería ser posible.

  4. Esto es muy, muy difícil. Debido a restricciones de seguridad, en la mayoría de los navegadores, en general no es posible sin instalar una extensión o similar. Su mejor opción podría ser los lenguajes de scripting patentados de Internet Explorer (WScript, VBScript) junto con el modelo de "zonas de seguridad", pero dudo que la ejecución de archivos locales sea posible incluso hoy en día.

+0

1. Pero no quiero ejecutar algo en otro sitio. Solo quiero tener acceso al contenido de una página web públicamente disponible. Acabo de leer (no ejecutar). 2. ¿Cuáles son exactamente las limitaciones sobre los argumentos de lectura GET? Por lo que puedo obtener los valores de la variable, estoy contento. – Roman

+0

1. Sí, aún no es posible. La forma habitual de hacerlo es usar un script Proxy del lado del servidor que se ejecuta en el mismo dominio que la página solicitada y recupera el contenido, pero incluso eso no funcionará si su página se encuentra en la PC del usuario. Puede usar un proxy si esta página de la que hablamos está en un servidor web. 2. Limitaciones de tamaño: es seguro transportar un máximo de aprox. 1024 bytes de esa manera. –

+0

Buena respuesta, Pekka :-) Con respecto a 1, 3 y 4, creo que IE es la única opción real aquí. –

2

Uso de Internet Explorer con un archivo local, se puede hacer algo de lo que estamos tratando de hacer:

  1. Es cierto que las páginas están limitados por la política del mismo origen (ver enlace de Pekka) Pero esto se puede solucionar en IE utilizando la interfaz COM WinHttpRequest.

  2. Como mencionó Pekka, lo mejor que puedes gestionar es solicitudes GET (usando window.location.search). Las variables de solicitud POST son completamente inalcanzables.

  3. Puede usar la interfaz COM para FileSystemObject para leer & escribir archivos de texto locales.

  4. puede utilizar el método de la interfaz WScript.ShellExec para ejecutar un programa local.

Así que casi todo lo que ha pedido es posible, si está dispuesto a utilizar Internet Explorer. Las interfaces COM requerirán permiso explícito para ejecutarse (al igual que la barra de alerta amarilla que aparece). También puede consultar la creación de un Windows Desktop Gadget (Vista o Win 7) o un HTML Application (HTA) para lograr su objetivo.

En su defecto, convierta su computadora en un servidor real usando XAMPP y escriba sus páginas en PHP.

+0

+1 para información completa específica de IE, ¡es bueno saberlo! –

+0

Sin embargo, puede hacer mucho, mucho más con Firefox usando XUL, Prism, Weave y muchas otras herramientas. Firefox está diseñado para hacer tales cosas y funcionarán en cualquier plataforma. – Rob

+0

@Rob: cita 'XUL, Prism y muchas otras herramientas'. Todo en mi respuesta es posible solo por tener Windows instalado. No en lo más mínimo complicado. No estamos hablando de hacer 'mucho, mucho más', estamos hablando de hacer lo que el OP especificó en su pregunta y, en realidad, puedes hacer casi cualquier cosa con JavaScript y COM en IE, como estoy seguro puede hacerlo con Fx, XUL, etc. Puede dar su propia respuesta sugiriendo esas herramientas :-) –

2

ver que tengo lo que quieres hacer mejores cosas se hacen siguiendo

  1. elegir una librería javascript (por ejemplo: jQuery, Dojo, Yui, etc), yo uso jquery.this disminuirá un poco de su carga
  2. a pesar de guardar datos de formularios en un archivo local, almacenarlos en variables locales procesarlos y enviarlos al servidor (para un procesamiento posterior como agregar/actualizar bases de datos, etc.) utilizando la solicitud XMLHttp, y cuando el servicio web devuelve datos actualizar dom.

que le muestro una muestra

--Este es dom

Name:<input type='text' id='name' /> 

<a href='javascript:void(0)' onClick='submit()'>Submit Form</a> 
<br> 
<div id='target'></div> 

--this is js 
function submit() 
{ 
var _name=$('#name').val();// collect text box's data 
//now validate it or do any thing you want 

callWebservice(_name,_suc,_err); 
//above call service fn has to be created by you where you send this data 
//this function automatically do xmlHttprequest etc for you 
//you have to create it ur self 
} 

//call this fn when data is sucessfully returned from server 
function _suc(data) 
{ 
//webservice has returned data sucessefully 
//data= data from server, may be in this case= "Hello user Name"; (name = filled in input box); 
//update this data in target div(manipulate dom with new data); 
$('#target').html(data); 
} 
function _err() 
{ 
//call this fn when error occurs on server 
} 

// en realidad la mayor parte del trabajo se realiza utilizando JSON. Te he mostrado la idea básica de cómo usar js para manipular dom y llamar a servicios y hacer reposo. de esta manera evitamos las recargas de página y los datos nuevos son visibles para el espectador

+0

¿Pero cómo el servidor web puede devolver datos? Me dijeron que JavaScript no puede leer nada del servidor web. – Roman

+0

para obtener datos del servidor u tiene que hacer la solicitud XMLHttp. este objeto XMLHttp tiene muchas propiedades, una de las cuales es url donde usted especifica qué url procesará estos datos. lea algunos artices en línea en ajax, lo ayudará. –

1

Respondo diciendo que hay mucho que puedes hacer, pero luego en el comentario al OP, dices

"Me gustaría programar un juego grupal "

Y por lo tanto, mi respuesta se convierte en hacer solo en el lado del cliente lo que puede y está dispuesto a verificar por el lado del servidor. Never Trust the Client!

Y no quiero hacer mi trabajo dos veces.

Si va a hacer las cosas en el lado del cliente, tendrá que hacerlo dos veces, o si no estará sujeto a trampa desenfrenada.

0

Tuvimos la misma pregunta cuando comenzamos nuestro proyecto.
Al final movimos todo lo que pudimos en el lado de JS. Aquí está nuestra pila:

El backend recibe y envía datos JSON exclusivamente.
Utilizamos Erlang, pero Python sería lo mismo. Maneja la autenticación/seguridad y el almacenamiento.

La interfaz, está en HTML + CSS para elementos visuales y JS para la lógica.
Un motor de plantillas JS convierte el JSON en HTML. Hemos construido PURE, pero hay muchos otros disponibles. MVC puede ser una exageración en el lado del navegador, pero IMO utilizando un motor de plantilla es la menor separación que puede hacer.

El tiempo de respuesta es sorprendente. Una vez que la página y el JS/CSS están cargados (actualizados o en el caché), solo los datos cruzan la red para cada solicitud.

Cuestiones relacionadas