AddEventListener到SharePoint Modal窗口,以便父窗口可以执行在Modal内声明的函数

时间:2018-06-06 12:12:23

标签: sharepoint modal-dialog addeventlistener

以下代码包含在模态窗口的 $(document).ready 中,不起作用。显然,当addEventListener触发时,SharePoint模式窗口的iframe尚未加载到DOM中。 处理这个问题的正确方法是什么?

window.addEventListener("message", function(event) {
            if(event.data == "openpi");{
                alert(1)
            }
        });

谢谢!

1 个答案:

答案 0 :(得分:0)

SP.UI.ModalDialog.showModalDialog中有dialogReturnValueCallback选项,您可以从对话框中获取值,然后在父窗口中使用。

<script type="text/javascript">
     //******** Dialog with Data from Pop Up Starts Here ***********/
     function openDialogAndReceiveData(tUrl, tTitle) {
         var options = {
             url: tUrl,
             title: tTitle,
             dialogReturnValueCallback: onPopUpCloseCallBackWithData
         };
         SP.UI.ModalDialog.showModalDialog(options);
     }

     function onPopUpCloseCallBackWithData(result, returnValue) {
         if(result== SP.UI.DialogResult.OK)
         { 
             SP.UI.Status.removeAllStatus(true);
             var sId = SP.UI.Status.addStatus("Data successfully populated to text boxes from Pop-up");
             SP.UI.Status.setStatusPriColor(sId, 'green');
             document.getElementById('<%= txtData1.ClientID %>').value = returnValue[0];
             document.getElementById('<%= txtData2.ClientID %>').value = returnValue[1];
         }else if(result== SP.UI.DialogResult.cancel)
         {
             SP.UI.Status.removeAllStatus(true);
             var sId = SP.UI.Status.addStatus("You have cancelled the Operation !!!");
             SP.UI.Status.setStatusPriColor(sId, 'yellow');
         }
     }
     //******** Dialog with Data from Pop Up Ends Here ***********/
 </script>

Check here for details