如何在页面加载时打开Sharepoint Survey窗口

时间:2011-03-09 17:03:32

标签: sharepoint modal-dialog

我几天来一直在努力寻找这个问题的答案。我已经在Sharepoint 2010网站上创建了一个调查,我创建它的人希望它在页面加载时在模态窗口中打开,而不是必须单击“响应调查”才能实现此目的。

我尝试了多种基于javascript的解决方案,到目前为止我什么都没得到。有没有办法做到这一点?并且,如果存在,是否可能将此解决方案移植到其他页面,以便我可以在模式窗口(在页面加载时)而不是在单独的页面上打开其他调查或其他共享点页面?

2 个答案:

答案 0 :(得分:1)

使用... / yoursite / lists / yoursurvey / NewForm.aspx - 似乎高级设置“在对话框中使用打开的表单”不起作用。

答案 1 :(得分:0)

我已经为政策窗口做了这个。我在内容编辑器webpart中完成了整个内容,它基本上是不可见的,因为代码没有外观,我将chrome类型设置为none。

另一个选项是替换主页的功能,这也不难,但需要VS2010的开发系统。

对于提到的第一种方法。如果您希望每次都加载cookie,可能必须删除cookie。 使用以下命令创建新的内容编辑器Web部件:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
<script type="text/javascript" src="disclaimer.js"></script>

然后创建disclaimer.js:

_spBodyOnLoadFunctionNames.push("initialDisclaimerSetup");

var dialogTitle = "";
var dialogBody = "";
var dialogReturn = "";
var userID = _spUserId;

function initialDisclaimerSetup() {
    if(getCookie("DisclaimerShown" + userID) == "Yes") {
        return;
    } else {
        setCookie("DisclaimerShown" + userID, "No", 365);
    }

    getDisclaimerListItems();
}

function setCookie(cookieName, cookieValue, numExpireDays) {
    var expirationDate = new Date();
    expirationDate.setDate(expirationDate.getDate() + numExpireDays);
    document.cookie = cookieName + "=" + cookieValue + ";" +
        "expires=" + ((numExpireDays == null) ? "" : expirationDate.toUTCString());
}

function getCookie(cookieName) {
    if(document.cookie.length > 0) {
        return document.cookie.split(";")[0].split("=")[1];
    } else {
        return "";
    }
}

function getDisclaimerListItems() {
    var listName = "Disclaimer";

    var soapEnv = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
        + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
        + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
        + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope\/\">"
        + "<soap:Body>"
        + "<GetListItems xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\">"
        + "<listName>" + listName + "</listName>"
        + "<query><Query><Where><IsNotNull><FieldRef Name=\"Title\" /></IsNotNull></Where></Query></query>"
        + "<ViewFields><ViewFields>"
        + "<FieldRef Name=\"Title\"/><FieldRef Name=\"Disclaimer\"/>"
        + "</ViewFields></ViewFields>"
        + "</GetListItems>"
        + "</soap:Body>"
        + "</soap:Envelope>";

    $.ajax({
        url: "_vti_bin/Lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        contentType: "text/xml; charset=\"utf-8\"",
        complete: processResult
    });
}

function processResult(xData, status) {
    $(xData.responseXML).find("z\\:row").each(function() {
        dialogTitle = $(this).attr("ows_Title");
        dialogBody = $(this).attr("ows_Disclaimer");
        launchModelessDialog();

        if(dialogReturn == 0) {
            return false;
        } else if(dialogReturn == 1) {
        } else if(dialogReturn == 2) {
            return false;
        }
    });

    if(dialogReturn == 0) {
        getDisclaimerListItems();               
    } else if(dialogReturn == 1) {
        setCookie("DisclaimerShown" + userID, "Yes", 365);
    } else if(dialogReturn == 2) {
        window.close();
    }
}

function GetRootUrl() {
    var urlParts = document.location.pathname.split("/");
    urlParts[urlParts.length - 1] = "";
    return "https://" + document.location.hostname + urlParts.join("/");
}

function launchModelessDialog(){
    if (window.showModalDialog) {
        window.showModalDialog("./disclaimer.htm", window, "dialogWidth:700px;dialogHeight:700px");
    } else {
        objPopup = window.open("./disclaimer.htm", "popup1", "left=100,top=100,width=800,height=800,location=no,status=yes,scrollbars=yes,resizable=yes, modal=yes");
        objPopup.focus();
    }
}

然后创建disclaimer.htm:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
<script type="text/javascript">

    function initialRun() {
        //var allArgs = dialogArguments;
        var dialogTitle = dialogArguments.dialogTitle;
        var dialogBody = dialogArguments.dialogBody;
        dialogArguments.dialogReturn = "0";

        document.getElementById('mainWrapper').innerHTML = "<h1>" + dialogTitle + "</h1>"
            + "<br/>" + dialogBody + "<br/><br/>";
    }

    function returnYes() {
        dialogArguments.dialogReturn = 1;
        window.close();
    }

    function returnNo() {
        dialogArguments.dialogReturn = 0;
        window.close();
    }

    function returnClose() {
        dialogArguments.dialogReturn = 2;
        window.close();
    }
</script>
</head>

<body onload="initialRun()">
<div id="mainWrapper">
</div>
<div align="center">
    <input name="acceptTOS" type="button" value="I Accept" onClick="returnYes();" />
    <input name="acceptTOS" type="button" value="I Do NOT Accept" onClick="returnNo();" />
    <input name="acceptTOS" type="button" value="Close" onClick="returnClose();" />
</div>
</body>
</html>

然后创建一个名为“免责声明”的新自定义列表,并添加一个名为“免责声明”的新列,该列允许使用自由文本。