在没有服务器端,Silverlight,DBC等的SharePoint Intranet上处理跨域的最佳方法

Wes*_*ley 7 javascript sharepoint intranet cross-domain sharepoint-2010

我正在使用Microsoft内部SharePoint站点,我需要从跨域SharePoint站点提取列表数据.

出于各种原因,我不想使用Silverlight,现在也无法使用Business Data Connectivity.

有没有一种简单的方法来使用JavaScript或类似的东西来实现这一目标?

Jon*_*ski 10

" 简单吗?" 不完全是.鉴于您的要求,特别是"无服务器端 ",这是不可能的.

但是,如果您可以放弃该要求,则可以使用一些选项来启用跨域请求.

CORS

体面的支持,跨来源资源共享XMLHttpRequest和微软的XDomainRequest.但是,这将要求远程服务器在响应中包含正确的标头,以允许您的源/域发出请求.

<% Response.AddHeader("Access-Control-Allow-Origin", "*") %>
Run Code Online (Sandbox Code Playgroud)

JSONP

一个常见的选项是JSONP,它使用<script>带有callback全局函数名称的参数加载资源.由于JSON基于JavaScript文字,因此不会出现相同的浏览器支持问题,但远程服务器必须知道如何构造输出,并且仅限于GET请求.

// <script src="http://other.dom/resource?callback=loadResource"></script>

loadResource( [ {"id": 1, "name": "foo"}, {"id": 2, "name": "bar"} ] );
Run Code Online (Sandbox Code Playgroud)

服务器端代理

如果您要求的远程服务器无法(或不会)进行调整以支持跨域请求,那么您在服务器上创建服务器端代理几乎就剩下了.

AjaxPatters.org描述了一般模式,可以找到许多.NET实现,包括John Chapman跨域代理项目.