我有一个托管在服务器上的网页,比如在http://SVR1/path/index.html
,我想访问托管在另一台服务器上的本地SharePoint站点中的一些列表项,比如在http://SVR2/sites/mySite/
。
当前安装的SharePoint我正在使用(不在我的控制之下)不允许部署既不是SharePoint托管也不是提供者托管的应用程序,所以我试图使用SharePoint跨域库从纯粹的外部HTML5/JS/CSS3页面访问所需的列表项。我,作为一个用户,对我的SharePoint站点的列表有完全的访问权限,所以我想阅读它的项目应该没有问题。
下面是一个例子,我的页面如下:
<!doctype html>
<html>
<head>
<!-- Title -->
<title>Application Template</title>
<script language="javascript" type="text/javascript" src="js/jquery.js"></script>
<script language="javascript" type="text/javascript">
var hostweburl = "http://SVR2/sites/mySite";
var appweburl = "http://SVR1/path";
// Load the required SharePoint libraries
$(document).ready(function () {
$("#renderList").html("Requesting Lists...");
// resources are in URLs in the form:
// web_url/_layouts/15/resource
var scriptbase = hostweburl + "/_layouts/15";
// Load the js files and continue to the successHandler
$.getScript(scriptbase + "/SP.RequestExecutor.js", execCrossDomainRequest);
});
///////////////////////////////////////////////////////
// Function to prepare and issue the request to get
// SharePoint data
function execCrossDomainRequest() {
// executor: The RequestExecutor object
// Initialize the RequestExecutor with the app web URL.
var executor = new SP.RequestExecutor(appweburl);
// Issue the call against the host web.
// To get the title using REST we can hit the endpoint:
// hostweburl/_api/web/lists/getbytitle('listname')/items
// The response formats the data in the JSON format.
// The functions successHandler and errorHandler attend the
// sucess and error events respectively.
executor.executeAsync(
{
url: hostweburl + "/_api/web/lists",
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
success: successHandler,
error: errorHandler
}
);
}
///////////////////////////////////////////////////////
// Function to handle the success event.
// Prints the data to the page.
function successHandler(data) {
var jsonObject = JSON.parse(data.body);
var listsHTML = "";
var results = jsonObject.d.results;
for (var i = 0; i < results.length; i++) {
listsHTML = listsHTML +
"<p><h1>" + results[i].Title +
"</h1>" + results[i].Body +
"</p><hr>";
}
document.getElementById("renderList").innerHTML =
listsHTML;
}
///////////////////////////////////////////////////////
// Function to handle the error event.
// Prints the error message to the page.
function errorHandler(data, errorCode, errorMessage) {
document.getElementById("renderList").innerText =
"Could not complete cross-domain call: " + errorMessage;
}
</script>
</head>
<body>
<h1 id="Root Page" style="text-align:center;">This is the home page</h1>
<div id="renderList">Placeholder</div>
</body>
</html>
当我在浏览器中加载页面时,在javascript控制台中我得到一个错误:"未捕获错误:无效字段或参数requestInfo.url."。
我的印象是,问题是在变量appweburl
的内容,在我发现的所有例子中,是由SharePoint作为URL中查询部分的一部分提供的。但这意味着一个提供商托管的应用程序已经部署在SharePoint中——这是我做不到的——并且这个应用程序正在调用远程托管的对应程序。
所以问题是:是否有可能在完全外部的页面中使用SharePoint跨域库SharePoint,如果是,我该如何设置hostweburl
, appweburl
和其他东西来访问SharePoint列表?
你提到的两个url, appwebUrl和hostwebUrl确实是为应用程序设计的,所以我认为你不应该使用跨域库。
如果你只是使用非应用程序的方式连接呢?例如,您可以调用自定义web服务(在sharepoint之外),它可以通过CSOM连接到您的SP站点,或者您可以直接在javascript中完成此操作。