1

使用来自 codeplex 的 SPServices jQuery 库或任何其他基于 javascript 的解决方案是否可以使用此库和 jQuery 从独立的 HTML 页面调用 SharePoint 2010 Web 服务?基本上我需要将文件上传到现有的文档集,但我需要从独立页面这样做。用户将处于单点登录情况并登录到 Dynamics CRM。

CodePlex 的 SPService

4

2 回答 2

1

谷歌“共享点外的 spservices”。

第二个链接是必须在 SharePoint 中托管使用​​ SPServices 的页面吗?

来自 SPServices 作者:

虽然您使用 SPServices 的页面不必位于 SharePoint 中,但如果不是,通常会遇到身份验证问题。SharePoint 不知道用户的身份,或者可能存在跨域脚本问题。所有这一切都有太多的变化,我通常无法给出是或否的答案。

于 2012-08-24T19:55:31.917 回答
1

这是一个旧线程,但是在我自己尝试了很多痛苦之后,我通过在一个独立的 html 页面上创建一个 iFrame 来解决身份验证问题,该页面本身会加载另一个托管在 SharePoint 网站上的 html 页面。iFrame 中加载的页面使用 postMessage() 将 List 数据发送到父页面。这似乎也适用于 Firefox 和 Chrome。

总之:

第 1 步:创建一个 html 页面 (SharepointProxy.html) 并将其放入您要查询的站点上的 Sharepoint 列表中:

<!DOCTYPE html>
<html>
    <head>
        <title>Web Proxy IFrame</title>
        <meta charset="windows-1252">
        <meta name="viewport" content="width=device-width">
        <script src="jquery-1.10.2.js"></script>
        <script src="jquery.SPServices-2014.01.js"></script>
        <script>
            function callback(e){

                if(e.origin == "https://your.otherdomain.com/index"){ //this is your standalone web page
                    e.source.postMessage(jsonToSend, "https://your.otherdomain.com/index"); //same standalone web page here
                }
                return true;
            }
        </script>
    </head>
    <body>
        <h1>SharePoint proxy - Do Not delete!</h1>
        <p>If you'd like to know further detail about its purpose, please email someperson@some.com</p>
        <h2>Purpose</h2>
        <p>This page serves as a proxy to call within an Iframe on an external site. This page fetches [whatever]
            from the SharePoint Portal and makes them available as a JSON string</p>


        <script>
            var someListData;
            $().SPServices({
                operation: "GetListItems",
                webURL: "https://sharepoint-portal.com/sites/your_site",
                listName: "List Name",
                async: false,
                completefunc: function(xData, Status) {
                    //alert(xData.responseText);
                    someListData = $(xData.responseXML).find("z\\:row, row").map(function() {
                        return {
                            value: $(this).attr("ows_LinkTitle") || " ",
                            desc: $(this).attr("ows_Details") || " "
                        };
                    }).get();
                }
            });

            var jsonToSend = JSON.stringify(someListData);

            document.addEventListener("message", callback,false);
            window.top.postMessage(jsonToSend, "*");
        </script>
    </body>
</html>

第 2 步:在您要显示 Sharepoint 列表数据的网页上,放置这些函数以创建 iFrame 并从 SharePoint 加载您的页面:

(function() { //create an iFrame to load our SharepointProxy.html page inside of
    var iFrame = document.createElement("iframe");
    iFrame.style.display = "none";
    iFrame.id = "sharePointProxyFrameContainer";
    iFrame.src = "https://sharepoint-portal.com/sites/your_site/Site%20Assets/SharepointProxy.html";
    document.body.appendChild(iFrame);
})();

function processSharePointListData(d){
    var data = JSON.parse(d);
    // do something with data
}

window.addEventListener("message", function(e) {
    if (e.origin === "https://sharepoint-portal.com/") {
        processSharePointListData(e.data);
        return true;
    }

}, false);
于 2017-08-03T03:05:34.303 回答