Desabilitar os mesmos / tornando XMLHttpRequests domínio Política de passagem de Origem em WebKit WebViews?

StackOverflow https://stackoverflow.com/questions/2421224

Pergunta

Gostaria de desativar a política de mesma origem no XMLHttpRequests em minhas próprias WebViews embutidos. Eu tenho controle sobre as páginas carregadas / código que está sendo executado no WebView, então eu não me importo com aplicação da política de mesma origem. Eu gostaria de fazer solicitações entre domínios.

Eu tentei implementar o WebPolicyDelegate e WebResourceLoadDelegate mas eles não parecem ser chamado para XMLHttpRequests.

Foi útil?

Solução

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

Esperemos que este é o que você precisa! Você pode me enviar uma mensagem para webkit.

Outras dicas

Eu acho que você vai lutar para encontrar uma maneira de fazer isso de uma forma que é útil. Já considerou JSONP em vez de XHRs? http://en.wikipedia.org/wiki/JSON

A visão geral de alto nível é que JSONP usa o mesmo mecanismo para solicitar scripts externos como você está usando acima. A diferença é que o servidor irá reconhecer isso e vai empacotar a resposta JSON como o argumento para um método de retorno de chamada. Quando o seu site recebe este 'script', ele executa-lo voltando assim a dados diretamente em seu método de retorno de chamada.

Se você é capaz de usar um framework como o jQuery, mais do lado do cliente seria tratada transparentemente. Na verdade, ele irá usar praticamente os mesmos métodos que você usa para XHR pedidos (Ajax). Confira aqui: http://api.jquery.com/jQuery.getJSON/

Você poderia tentar adicionar o cabeçalho Access-Control-Allow-Origin: * para a resposta do servidor. Eu não acho que ele é suportado por todos os navegadores embora.

Mais informações: https://developer.mozilla.org/en/HTTP_access_control

eu estava procurando como fazer isso em OSX. Acontece WebPreferences tem um método privado: setWebSecurityEnabled. Defina esta opção para falso e ele deve funcionar.

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

Assim, por exemplo:

NSString* noSecurityPreferencesId = @"noSecurity";
WebPreferences* prefs = [[WebPreferences alloc] initWithIdentifier: noSecurityPreferencesId];
[prefs setWebSecurityEnabled: false];
[webView setPreferencesIdentifier: noSecurityPreferencesId];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top