Desabilitar os mesmos / tornando XMLHttpRequests domínio Política de passagem de Origem em WebKit WebViews?
-
19-09-2019 - |
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.
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];