在WebKit WebViews中禁用同源策略/制作跨域XMLHttpRequests?

时间:2010-03-10 22:44:15

标签: javascript webkit xmlhttprequest webview same-origin-policy

我想在我自己的嵌入式WebView中禁用XMLHttpRequests上的相同原始策略。我可以控制在WebView中加载的页面/正在执行的代码,所以我不关心强制实施相同的原始策略。我想提出跨域请求。

我尝试过实现WebPolicyDelegate和WebResourceLoadDelegate,但似乎没有为XMLHttpRequests调用它们。

4 个答案:

答案 0 :(得分:1)

我认为你很难找到以对你有用的方式做到这一点。您是否考虑过JSONP而不是XHR? http://en.wikipedia.org/wiki/JSON

高级概述是JSONP使用相同的机制来请求您在上面使用的外部脚本。区别在于您的服务器将识别这一点,并将JSON响应打包为回调方法的参数。当您的站点收到此“脚本”时,它会执行它,从而将数据直接返回到您的回调方法中。

如果您能够使用像jQuery这样的框架,那么大多数客户端都将为您透明地处理。实际上,它将使用与XHR(AJAX)请求几乎相同的方法。请在此处查看:http://api.jquery.com/jQuery.getJSON/

答案 1 :(得分:1)

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

希望这就是你所需要的! 您可以向我发送webkit消息。

答案 2 :(得分:0)

您可以尝试将Access-Control-Allow-Origin: *标头添加到服务器响应中。我不认为所有浏览器都支持它。

更多信息:https://developer.mozilla.org/en/HTTP_access_control

答案 3 :(得分: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];