8

Ich möchte die gleiche Ursprungsrichtlinie für XMLHttpRequests in meinen eigenen eingebetteten WebViews deaktivieren. Ich habe die Kontrolle über die geladenen Seiten/den Code, der in der WebView ausgeführt wird, daher ist es mir egal, ob ich dieselbe Herkunftsrichtlinie durchsetzen möchte. Ich möchte domänenübergreifende Anfragen stellen.Deaktivieren der gleichen Ursprungsrichtlinie/Erstellen von domainübergreifenden XMLHttpRequests in WebKit WebViews?

Ich habe versucht, die WebPolicyDelegate und WebResourceLoadDelegate zu implementieren, aber sie scheinen nicht für XMLHttpRequests aufgerufen werden.

+1

Sie scheinen die Antwort herausgefunden zu haben, könnten Sie bitte teilen, was es war? Ich verbinde WebView in meinem Cocoa-Programm wie folgt: - (void) applicationDidFinishLaunching: (NSNotification *) aNotification { \t NSView * contentView = [window contentView]; \t WebView * webView = [[WebView-Zuordnung] initWithFrame: contentView.frame]; \t webView.autoresizingMask = NSViewWidthSizable | NSViewHeightSize; \t [contentView addSubview: webView]; \t [[webView mainFrame] loadRequest: [NSURLAnfrage requestWithURL: [NSURL URLWithString: @ "http://www.google.com"]]]; } – DenNukem

Antwort

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

Hoffentlich ist das, was Sie brauchen! Sie können mir eine Nachricht für Webkit senden.

1

Ich denke, du wirst es schwer finden, das auf eine Weise zu tun, die dir nützlich ist. Haben Sie JSONP anstelle von XHRs in Betracht gezogen? http://en.wikipedia.org/wiki/JSON

Die allgemeine Übersicht besteht darin, dass JSONP denselben Mechanismus für die Anforderung externer Skripts verwendet, wie Sie oben verwenden. Der Unterschied besteht darin, dass Ihr Server dies erkennt und die JSON-Antwort als Argument für eine Callback-Methode zusammenfasst. Wenn Ihre Site dieses "Skript" empfängt, wird es ausgeführt und gibt die Daten direkt an Ihre Callback-Methode zurück.

Wenn Sie ein Framework wie jQuery verwenden können, werden die meisten Client-Seiten transparent für Sie behandelt. In der Tat wird es praktisch die gleichen Methoden verwenden, die Sie für XHR (AJAX) -Anfragen verwenden. Überprüfen Sie es hier: http://api.jquery.com/jQuery.getJSON/

+0

Ich bin sehr vertraut mit JSONP, aber das ist nicht das, wonach ich suche. Ich möchte SOP einfach in einer kontrollierten Umgebung deaktivieren, in der ich ein WebView einbettele.Ich rede nicht davon, SOP in normalen Webbrowsern zu deaktivieren, da ich weiß, dass dies nicht möglich ist (aus gutem Grund). – tlrobinson

0

Ich suchte nach, wie man das unter OSX macht. Es stellt sich heraus WebPreferences hat eine private Methode: setWebSecurityEnabled. Setze dies auf false und es sollte funktionieren.

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

So zum Beispiel:

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