8

我想在自己的嵌入式WebView中禁用XMLHttpRequests上的相同原始策略。我可以控制在WebView中加載的頁面/正在執行的代碼,所以我不在乎執行相同的原始策略。我想提出跨域請求。禁用WebKit WebViews中的相同來源策略/製作跨域XMLHttpRequests?

我試過實現WebPolicyDelegate和WebResourceLoadDelegate,但他們似乎並沒有被調用XMLHttpRequests。

+1

你似乎已經想通了答案,你可以請分享它是什麼?我在我的Cocoa程序中嵌入了WebView,如下所示: - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {{}} {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 2011-01-16 00:10:12

回答

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

希望這是你需要的東西! 您可以發送給我一個webkit的消息。

1

我想你會很難找到以對你有用的方式做到這一點。你考慮過JSONP而不是XHR嗎? http://en.wikipedia.org/wiki/JSON

高級概述是,JSONP使用與上面使用的相同的機制來請求外部腳本。區別在於你的服務器會識別這個,並將JSON響應打包爲回調方法的參數。當你的網站收到這個'腳本'時,它會執行它,從而將數據直接返回到你的回調方法中。

如果你能夠使用像jQuery這樣的框架,大多數客戶端將會被透明地處理。實際上,它將使用幾乎與用於XHR(AJAX)請求的方法相同的方法。看看這裏:http://api.jquery.com/jQuery.getJSON/

+0

我對JSONP非常熟悉,但這不是我要找的。我只是想在一個受控的環境中禁用SOP,因爲我嵌入了一個WebView。我不是說在正常的Web瀏覽器中禁用SOP,因爲我知道這是不可能的(出於很好的理由) – tlrobinson 2010-09-08 17:00:52

0

我一直在尋找如何在OSX上做到這一點。原來WebPreferences有一個私有方法:setWebSecurityEnabled。設置爲false,它應該工作。

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

因此,例如:

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