8

Me gustaría deshabilitar la misma política de origen en XMLHttpRequests en mis propias WebViews incorporadas. Tengo control sobre las páginas cargadas/código que se está ejecutando en WebView, por lo que no me importa aplicar la misma política de origen. Me gustaría hacer solicitudes entre dominios.¿Deshabilitar la misma política de origen/hacer XMLHttpRequests de dominio cruzado en WebKit WebView?

He intentado implementar WebPolicyDelegate y WebResourceLoadDelegate pero no parecen ser llamados para XMLHttpRequests.

+1

Usted parece haber descubierto la respuesta, ¿podría compartir lo que era? Estoy incorporando WebView en mi programa Cocoa de la siguiente manera: - (void) applicationDidFinishLaunching: (NSNotification *) aNotification { \t NSView * contentView = [window contentView]; \t WebView * webView = [[WebView alloc] initWithFrame: contentView.frame]; \t webView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; \t [contentView addSubview: webView]; \t [[webView mainFrame] loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: @ "http://www.google.com"]]]; } – DenNukem

Respuesta

1
void WebSettingsImpl::setWebSecurityEnabled(bool enabled) 
{ 
    m_settings->setWebSecurityEnabled(enabled); 
} 

Esperemos que esto es lo que necesita! Puedes enviarme un mensaje para webkit.

1

Creo que le costará encontrar de todos modos para hacer eso de una manera que sea útil para usted. ¿Has considerado JSONP en lugar de XHR? http://en.wikipedia.org/wiki/JSON

La descripción general de alto nivel es que JSONP utiliza el mismo mecanismo para solicitar scripts externos que los que está utilizando anteriormente. La diferencia es que su servidor reconocerá esto y empaquetará la respuesta JSON como argumento para un método de devolución de llamada. Cuando su sitio recibe esta "secuencia de comandos", la ejecuta y devuelve los datos directamente a su método de devolución de llamada.

Si puede utilizar un marco como jQuery, la mayor parte del lado del cliente se tratará de forma transparente para usted. De hecho, utilizará prácticamente los mismos métodos que utiliza para las solicitudes XHR (AJAX). Compruébelo aquí: http://api.jquery.com/jQuery.getJSON/

+0

Estoy muy familiarizado con JSONP pero eso no es lo que estoy buscando. Simplemente quiero deshabilitar el SOP en un entorno controlado donde estoy incorporando un WebView. No estoy hablando de deshabilitar el SOP en los navegadores web normales ya que soy consciente de que no es posible (por una buena razón) – tlrobinson

0

Estaba buscando cómo hacerlo en OSX. Resulta que WebPreferences tiene un método privado: setWebSecurityEnabled. Establezca esto en falso y debería funcionar.

http://trac.webkit.org/browser/trunk/Source/WebKit/mac/WebView/WebPreferences.mm?rev=111350#L1011

Así, por ejemplo:

NSString* noSecurityPreferencesId = @"noSecurity"; 
WebPreferences* prefs = [[WebPreferences alloc] initWithIdentifier: noSecurityPreferencesId]; 
[prefs setWebSecurityEnabled: false]; 
[webView setPreferencesIdentifier: noSecurityPreferencesId]; 
Cuestiones relacionadas