如何在JavaScript / Chrome中本地执行跨域请求?

时间:2014-09-05 12:55:04

标签: javascript jquery google-chrome cross-domain

我正在开发一个测试页面,该页面仅供我自己使用,仅供Google Chrome使用。有没有办法用这样的条件对第三方服务器(不允许这样的请求)执行跨域请求?请求可以是GETOPTIONS

(我知道Chrome扩展程序,如高级REST客户端,它可以执行此类请求,但它对我没有帮助,因为复杂的计算应该在请求执行之前执行)

3 个答案:

答案 0 :(得分:1)

一种方法是从Web服务器而不是本地文件系统提供文件。另一种方法是使用标志启动Chrome:

chrome --disable-web-security

(来自Cross-origin image load denied on a local image with THREE.js on Chrome

这里有更广泛的标志列表:http://peter.sh/experiments/chromium-command-line-switches/

答案 1 :(得分:1)

我正在开发一个与此类似的项目,我不得不将一个简单的html文件上传到我的一个prod服务器进行测试,这样我就可以测试跨域功能了。 html文件指向localhost,因此它只适用于我在开发过程中。

jquery代码看起来像这样(以防它有帮助):

        $.ajax({
            type: "POST",
            dataType: "json",
            cache: false,
            url: url,
            data: data,
            crossDomain: true,
            success: function (data) {
                ATSJBAjax = null;
                if (callback != null) callback(data);
            }
        });

此外我正在使用c#/ MVC,我必须向所有控制器方法添加一个属性,将“Access-Control-Allow-Origin”添加到响应标头中,以便Chrome可以正常使用它。我调用了属性“AllowCrossDomainAccess”,它引用了下面的类:

public class AllowCrossDomainAccessAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
        base.OnActionExecuting(filterContext);
    }
}

答案 2 :(得分:1)

一种选择是完全禁用同源策略,详见Disable same origin policy in Chrome。这可能会对你有所帮助,但它有点不优雅,因为它关闭了整个浏览器实例的同源策略。

第二个选项是创建一个小型Chrome扩展程序,其中包含您需要加载的所有文件。它将使您的文件可以通过chrome-extension://...访问,并且只有该扩展名中的文件才能免受同源政策的影响。

创建一个新文件夹,将测试网页放入其中,并在同一文件夹中创建manifest.json文件:

/testing_extension
    test_page_immune_from_same_origin.html
    script_used_by_test_page.js
    styles_for_test_page.css
    manifest.json

manifest.json的内容应为

{
  "name": "All-origin access extension",
  "manifest_version": 2,
  "version": "1.0",
  "permissions": ["<all_urls>"]
}

加载扩展程序,转到chrome://extensions,启用Developer Mode,然后选择带Load unpacked extension...选项的新文件夹。

您可以将自己的页面视为扩展资源chrome-extension://[app_id]/[file_name],其中&#34; app_id&#34;是chrome://extensions页面上扩展名列出的哈希值。 (它将是一长串小写字母。)现在,当页面执行跨源资源时,它会使用浏览器扩展的权限,不受同源策略的限制。

请注意,您需要移动任何inline scripts into separate files才能符合扩展CSP要求。