Отключить ту же политику происхождения / создание междоменных запросов XMLHttp в WebKit WebViews? - PullRequest
8 голосов
/ 11 марта 2010

Я хотел бы отключить ту же политику происхождения для запросов XMLHttp в моих собственных встроенных WebView. У меня есть контроль над загруженными страницами / кодом, выполняемым в WebView, поэтому я не забочусь о применении той же политики происхождения. Я хотел бы делать междоменные запросы.

Я пытался реализовать WebPolicyDelegate и WebResourceLoadDelegate, но, похоже, они не вызываются для запросов XMLHttp.

Ответы [ 4 ]

1 голос
/ 16 октября 2010
void WebSettingsImpl::setWebSecurityEnabled(bool enabled)
{
    m_settings->setWebSecurityEnabled(enabled);
}

Надеюсь, это то, что вам нужно! Вы можете отправить мне сообщение для webkit.

1 голос
/ 08 сентября 2010

Я думаю, вы будете изо всех сил пытаться найти способ сделать это так, чтобы это было полезно для вас. Вы рассматривали JSONP вместо XHR? http://en.wikipedia.org/wiki/JSON

Общий обзор заключается в том, что JSONP использует тот же механизм для запроса внешних скриптов, что и вы, использованный выше. Разница в том, что ваш сервер распознает это и упакует ответ JSON в качестве аргумента метода обратного вызова. Когда ваш сайт получает этот «скрипт», он выполняет его, возвращая данные непосредственно в ваш метод обратного вызова.

Если вы можете использовать такую ​​среду, как jQuery, большая часть клиентской части будет прозрачно обработана для вас. Фактически, он будет использовать практически те же методы, которые вы используете для запросов XHR (AJAX). Проверьте это здесь: http://api.jquery.com/jQuery.getJSON/

0 голосов
/ 22 марта 2012

Я искал, как сделать это на 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];
0 голосов
/ 08 сентября 2010

Вы можете попробовать добавить заголовок Access-Control-Allow-Origin: * к ответу сервера. Я не думаю, что это поддерживается всеми браузерами.

Подробнее: https://developer.mozilla.org/en/HTTP_access_control

...