我正在構建一個應該顯示有關特定人員信息的Sharepoint 2013應用程序部分。人GUID將通過Sharepoint頁面URL中的querystring提供,並以某種方式將querystring(鍵/值)傳遞給所有iFrame/app部分。使用Sharepoint查詢字符串值作爲應用程序部分屬性
起初我希望能夠使用App部件的Element.xml文件中的自定義屬性將查詢字符串發送到iFrame(我期望Sharepoint足夠聰明,它有一個datatype = querystirng,它從SP抓取查詢字符串URL並將其推送到應用程序部分)。但是Elements.xml中的屬性似乎是靜態的,只能在編輯SP頁面時在「編輯Web部件」菜單中定義。
我試圖通過使用JavaScript(按照本指南,修改一下位:http://prasantabarik.wordpress.com/2013/09/26/pass-querystring-value-from-sharepoint-page-to-app-partclient-web-part/)將查詢字符串注入到Sharepoint頁面中包含的所有iframe中。即我打開所有的iframe,並更改了iframe.src(也嘗試過iframe.setAttribute(src,newSrc)),以包含JavaScript從windows.location.search中抓取的querystrings。這似乎工作80%的時間,頁面與應用程序部分加載與查詢字符串傳遞到所有應用程序部分成功加載。然而,其他20%的時間iframe.src設置正確,但沒有被瀏覽器重新加載(顯示沒有查詢字符串的初始應用程序部分頁面)。這似乎是我的Chrome v.31瀏覽器中的一個問題。在IE中它每次都能成功運行。
這裏是我的SharePoint的代碼片段託管的JavaScript(包含在在SharePoint主模板的底部):
var sharepointQueryKeyValuePairs = {};
window.location.search.substr(1).split("&").forEach(function (pair) {
if (pair === "") return;
var parts = pair.split("=");
sharepointQueryKeyValuePairs[parts[0]] = parts[1];
});
var arrFrames = document.getElementsByTagName("iframe");
for (var i = 0; i < arrFrames.length; i++) {
var iFrame = arrFrames[i];
var clientID = encodeURIComponent("displayMode=spRedirect");
if (iFrame.src.indexOf(clientID) != -1) {
var querystring = encodeURIComponent("displayMode=sp");
var newIframeSrc = iFrame.src.replace(clientID, querystring);
var sharepointQueryKeyValuePairsCopy = {};
$.extend(sharepointQueryKeyValuePairsCopy, sharepointQueryKeyValuePairs);
newIframeSrc.split(encodeURIComponent('?'))[1].split(encodeURIComponent("&")).forEach(function (pair) {
if (pair === "") return;
var parts = pair.split(encodeURIComponent("="));
if (sharepointQueryKeyValuePairs.hasOwnProperty(parts[0])) {
newIframeSrc = newIframeSrc.replace(encodeURIComponent(parts[0] + "=" + parts[1]), encodeURIComponent(parts[0] + "=" + sharepointQueryKeyValuePairs[parts[0]]));
delete sharepointQueryKeyValuePairsCopy[parts[0]];
}
});
//todo: loop through sharepointQueryKeyValuePairsCopy and inject the rest of the querystring values
iFrame.setAttribute('src', newIframeSrc);
//also tried iFrame.src = newIframeSrc;
}
}
有沒有人對如何這可能是工作的任何想法?最好有一個更簡潔的解決方案的建議。我不喜歡javascript解決方案,應該有另一種更優雅的方式將SP查詢字符串傳遞給應用程序部分!
問題以前在這裏問(https://sharepoint.stackexchange.com/questions/72189/use-query-string-value-as-app-part-property-2013)沒有任何答案,所以我試試我的運氣。
感謝尼古拉,這可能是答案,爲什麼我的JS在IE和FF,而不是Chrome瀏覽器...但是,我希望有另一種解決我的問題,它不需要JS 「黑客」。 – Howie