2011-02-28 22 views
8

Estoy escribiendo una aplicación HTML5 que está recopilando datos de algunas fuentes diferentes usando JSONP. Todo lo que estoy haciendo con un GET funciona perfectamente. Ahora estoy tratando de POSTAR datos, y me he encontrado con un inconveniente interesante. Necesito enviar datos desde mi aplicación a otra, donde mi aplicación se ejecuta desde una máquina local. Intento escribir una aplicación móvil con capacidad multiplataforma (piense en Pulse/Flipboard), por lo que el código siempre se ejecutará desde una fuente local. Mi proceso de pensamiento fue el siguiente:Intercambio de recursos entre orígenes y archivo: //

Todos los navegadores he orientado son WebKit basado (iPad, libro de jugadas, Android) , así que me pregunto si hay crujidos en el mismo código de política de origen que puedo colar a través de? Tal vez algo usando iframe o postMessage?

+0

"Esto hace que la solicitud falle (error XmlHttpRequest: Origin-Access no está permitido por Access-Control-Allow-Origin)" - Está permitido en los navegadores actuales, por lo que la pregunta está desactualizada. – inf3rno

Respuesta

9

Como iba a resultar, la forma más fácil de hacerlo es publicar en la dirección URL de destino dentro de un iframe. La misma política de origen en la mayoría de los navegadores le permite realizar un HTTP POST de un dominio a otro no relacionado. Resolví el problema agregando un iframe a mi página, inicialmente establecido en una página local de bootstrap. Como esa página se cargó desde el mismo dominio, puedo controlarla a través de un script. Lo utilicé para publicar el formulario en mi sitio de destino y sondeé los resultados para determinar si mi llamada fue exitosa. No es elegante, pero funciona.

1

biblioteca Esta Javascript casi seguro que puede ayudar:

http://easyxdm.net/

easyXDM is a Javascript library that enables you as a developer to easily work around the limitation set in place by the Same Origin Policy, in turn making it easy to communicate and expose javascript API’s across domain boundaries.

..

At the core easyXDM provides a transport stack capable of passing string based messages between two windows, a consumer (the main document) and a provider (a document included using an iframe). It does this by using one of several available techniques, always selecting the most efficient one for the current browser. For all implementations the transport stack offers bi-directionality, reliability, queueing and sender-verification.

+1

¡Gracias por el enlace! Esto se ve muy bien, pero no coincide específicamente con lo que estaba buscando. Se parece a los navegadores basados ​​en webkit modernos, que estoy usando ya que estoy apuntando a plataformas móviles, su respuesta a la comunicación de ventana es el método HTML5 postMessage. Esto solo funciona si ambos lados de la aplicación están publicando y recibiendo mensajes. –

Cuestiones relacionadas