8

Je voudrais désactiver la même politique d'origine sur XMLHttpRequests dans mes propres WebViews incorporés. J'ai le contrôle sur les pages chargées/code en cours d'exécution dans le WebView, donc je ne me soucie pas de l'application de la même politique d'origine. Je voudrais faire des demandes interdomaines.Désactiver la même stratégie d'origine/faire des XMLHttpRequests interdomaines dans WebKit WebViews?

J'ai essayé d'implémenter WebPolicyDelegate et WebResourceLoadDelegate, mais ils ne semblent pas être appelés pour XMLHttpRequests.

+1

Vous semblez avoir trouvé la réponse, pourriez-vous s'il vous plaît partager ce qu'il était? J'intègre WebView dans mon programme Cocoa comme suit: - (void) applicationDidFinishLaunching: (NSNotification *) aNotification { \t NSView * contentView = [fenêtre contentView]; \t WebView * webView = [[WebView alloc] initWithFrame: contentView.frame]; \t webView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; \t [contentView addSubview: webView]; LoadDequest: [NSURLRequest requestWithURL: [NSURL URLWithString: @ "http://www.google.com"]]]; } – DenNukem

Répondre

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

Espérons que c'est ce que vous avez besoin! Vous pouvez m'envoyer un message pour le webkit.

1

Je pense que vous aurez du mal à trouver de toute façon de le faire d'une manière qui vous est utile. Avez-vous considéré JSONP au lieu de XHR? La vue d'ensemble de haut niveau est que JSONP utilise le même mécanisme pour demander des scripts externes que ceux que vous utilisez ci-dessus. La différence est que votre serveur le reconnaîtra et emballera la réponse JSON en tant qu'argument d'une méthode de rappel. Lorsque votre site reçoit ce 'script', il l'exécute, renvoyant ainsi les données directement dans votre méthode de rappel.

Si vous êtes en mesure d'utiliser un framework comme jQuery, la plupart du côté client serait géré de manière transparente pour vous. En fait, il utilisera pratiquement les mêmes méthodes que celles que vous utilisez pour les requêtes XHR (AJAX). Vérifiez-le ici: http://api.jquery.com/jQuery.getJSON/

+0

Je connais très bien JSONP mais ce n'est pas ce que je cherche. Je veux simplement désactiver la SOP dans un environnement contrôlé où j'introduis un WebView. Je ne parle pas de désactiver la SOP dans les navigateurs web normaux car je sais que ce n'est pas possible (pour une bonne raison) – tlrobinson

0

Je cherchais comment faire cela sur OSX. Il s'avère que WebPreferences dispose d'une méthode privée: setWebSecurityEnabled. Réglez ceci sur false et cela devrait fonctionner.

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

Ainsi, par exemple:

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