首页 > 解决方案 > window.open 不再适用于 Chrome/Edge 更新

问题描述

ISSUE: 最新一轮的 Google Chrome 和 MS Edge 更新使我们使用 window.DialogArguments 的一些自定义 Dynamics CRM 代码停止工作,我们无法弄清楚原因。它仍然可以在兼容模式下的 Internet Explorer 中运行。

Dynamics CRM 版本:本地 8.2.9.19

我们有一个调用 javascript 函数 SendEmail() 的功能区按钮,该函数调用带有下拉列表框和按钮的弹出窗口。javascript 有一个覆盖函数,可以用普通的 window.open 替换旧的 window.showModalDialog 函数。问题似乎是它不再传递参数并且窗口甚至不会打开。

// MW 6/4/2019
window.showModalDialog = function (url, arg, feature) 
{
     var opFeature = feature.split(";");
     var featuresArray = new Array()
     if (document.all) 
     { 
               for (var i = 0; i < opFeature.length - 1; i++) 
               {
               var f = opFeature[i].split("=");
               featuresArray[f[0]] = f[1];
               }
     }
     else 
     {
            for (var i = 0; i < opFeature.length - 1; i++) 
               {
               var f = opFeature[i].split(":");
               featuresArray[f[0].toString().trim().toLowerCase()] = f[1].toString().trim();
               }
     }
     var h = "200px", w = "400px", l = "100px", t = "100px", r = "yes", c = "yes", s = "no";
     if (featuresArray["dialogheight"]) h = featuresArray["dialogheight"];
     if (featuresArray["dialogwidth"]) w = featuresArray["dialogwidth"];
     if (featuresArray["dialogleft"]) l = featuresArray["dialogleft"];
     if (featuresArray["dialogtop"]) t = featuresArray["dialogtop"];
     if (featuresArray["resizable"]) r = featuresArray["resizable"];
     if (featuresArray["center"]) c = featuresArray["center"];
     if (featuresArray["status"]) s = featuresArray["status"];

     var modelFeature = "height = " + h + ",width = " + w + ",left=" + l + ",top=" + t + ",model=yes,alwaysRaised=yes" + ",resizable= " + r + ",celter=" + c + ",status=" + s;
     var model = window.open(url, "", modelFeature, null);
     model.dialogArguments = arg;
}

//Purpose: saves the form and shows html pop up with all the templates of email type
function SendEmail() {
  var popup = window.showModalDialog(Xrm.Page.context.getClientUrl() + "/WebResources/cmm_sendemail.htm", this, 'center:yes;unadorned:yes;resizable:1;dialogHeight:60px;dialogwidth:550px;scroll:no;status=no');
}

正在调用的 HTML Web 资源 cmm_sendemail.htm 如下所示。“ var entityName = window.dialogArguments.Xrm.Page.data.entity.getEntityName();” 引用 window.dialogArguments 的行在浏览器控制台中返回为未定义。


    
        <title>Send Email</title>
            <style>
        body {
    background-color: rgb(233, 237, 241);
         }
        select {
    padding:5px;
    margin: 0;
    -webkit-border-radius:4px;
    -moz-border-radius:4px;
    border-radius:4px;
    -webkit-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
    -moz-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
    box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
    background: #f8f8f8;
    color:#888;
    border:none;
    outline:none;
    height : 30px;
    display: inline-block;
    -webkit-appearance:none;
    -moz-appearance:none;
    
    cursor:pointer;
}
       .myButton {
         -moz-box-shadow:inset 0px 1px 3px 0px #91b8b3;
         -webkit-box-shadow:inset 0px 1px 3px 0px #91b8b3;
         box-shadow:inset 0px 1px 3px 0px #91b8b3;
         background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #768d87), color-stop(1, #6c7c7c));
         background:-moz-linear-gradient(top, #768d87 5%, #6c7c7c 100%);
         background:-webkit-linear-gradient(top, #768d87 5%, #6c7c7c 100%);
         background:-o-linear-gradient(top, #768d87 5%, #6c7c7c 100%);
         background:-ms-linear-gradient(top, #768d87 5%, #6c7c7c 100%);
         background:linear-gradient(to bottom, #768d87 5%, #6c7c7c 100%);
         filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#768d87', endColorstr='#6c7c7c',GradientType=0);
         background-color:#768d87;
         -moz-border-radius:18px;
         -webkit-border-radius:18px;
         border-radius:18px;
         border:1px solid #566963;
         display:inline-block;
         cursor:pointer;
         color:#ffffff;
         font-family:Arial;
         font-size:15px;
         font-weight:bold;
         padding:5px 15px;
    height: 30px;
         text-decoration:none;
         text-shadow:0px -1px 0px #2b665e;
}
.myButton:hover {
         background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #6c7c7c), color-stop(1, #768d87));
         background:-moz-linear-gradient(top, #6c7c7c 5%, #768d87 100%);
         background:-webkit-linear-gradient(top, #6c7c7c 5%, #768d87 100%);
         background:-o-linear-gradient(top, #6c7c7c 5%, #768d87 100%);
         background:-ms-linear-gradient(top, #6c7c7c 5%, #768d87 100%);
         background:linear-gradient(to bottom, #6c7c7c 5%, #768d87 100%);
         filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#6c7c7c', endColorstr='#768d87',GradientType=0);
         background-color:#6c7c7c;
}
.myButton:active {
         position:relative;
         top:1px;
}
    </style>
    
    <script src="cmm_jquery.js" type="text/javascript"></script>
    <script src="cmm_json2.js" type="text/javascript"></script>
    <script src="cmm_xrmservicelibrary.js" type="text/javascript"></script>
    <script type="text/javascript">
        function addOptions() {
            var entityName = window.dialogArguments.Xrm.Page.data.entity.getEntityName();
                          
            //CYB-20160218-ND
            //purpose: modified according to entity optionset field
            var fetchXml = "<a:ColumnSet>" +
                     "<a:AllColumns>false</a:AllColumns>" +
                     "<a:Columns xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" +
                       "<b:string>cmm_templatetype</b:string>" +
                       "<b:string>cmm_documentname</b:string>" +
                       "<b:string>cmm_name</b:string>" +
                       "<b:string>cmm_entitydropdown</b:string>" +
                     "</a:Columns>" +
                   "</a:ColumnSet>" +
                   "<a:Criteria>" +
                     "<a:Conditions />" +
                     "<a:FilterOperator>And</a:FilterOperator>" +
                     "<a:Filters>" +
                       "<a:FilterExpression>" +
                         "<a:Conditions>" +

                           "<a:ConditionExpression>" +
                             "<a:AttributeName>cmm_entitydropdown</a:AttributeName>" +
                             "<a:Operator>Equal</a:Operator>" +
                             "<a:Values xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" +
                               "<b:anyType i:type='c:string' xmlns:c='http://www.w3.org/2001/XMLSchema'>0</b:anyType>" +
                             "</a:Values>" +
                           "</a:ConditionExpression>" +

                           "<a:ConditionExpression>" +
                             "<a:AttributeName>cmm_templatetype</a:AttributeName>" +
                             "<a:Operator>Equal</a:Operator>" +
                             "<a:Values xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" +
                               "<b:anyType i:type='c:string' xmlns:c='http://www.w3.org/2001/XMLSchema'>" + 1 + "</b:anyType>" +
                             "</a:Values>" +
                           "</a:ConditionExpression>" +

                         "</a:Conditions>" +
                         "<a:FilterOperator>And</a:FilterOperator>" +
                         "<a:Filters />" +
                       "</a:FilterExpression>" +
                     "</a:Filters>" +
                   "</a:Criteria>" +
                   "<a:Distinct>false</a:Distinct>" +
                   "<a:EntityName>cmm_template</a:EntityName>" +
                   "<a:LinkEntities />" +
                      "<a:Orders>" +
                "<a:OrderExpression>" +
                  "<a:AttributeName>cmm_name</a:AttributeName>" +
                  "<a:OrderType>Ascending</a:OrderType>" +
                "</a:OrderExpression>" +
              "</a:Orders>" +
                   "<a:PageInfo>" +
                     "<a:Count>0</a:Count>" +
                     "<a:PageNumber>0</a:PageNumber>" +
                     "<a:PagingCookie i:nil='true' />" +
                     "<a:ReturnTotalRecordCount>false</a:ReturnTotalRecordCount>" +
                   "</a:PageInfo>" +
                   "<a:NoLock>false</a:NoLock>";

            var retrievedRecords = XrmServiceToolkit.Soap.RetrieveMultiple(fetchXml);
            var count = retrievedRecords.length;
            var btn = document.getElementById("button");
            if (count == 0) {

                btn.disabled = true;
            }
            else {

                btn.disabled = false;
            }
            //CYB-20160218-ND
            //purpose: added code for sorting the template list
            var index = 0;
            while (count != index) {
                var x = document.getElementById("templateList");
                var option = document.createElement("option");
                option.text = retrievedRecords[index].attributes['cmm_name'].value;
                option.value = retrievedRecords[index].id;
                x.add(option);
                index++;
            }
        }
        function sendTemplate(method) {
            try {
                //debugger;
                var selectElement = document.getElementById("templateList");

                var templateGuid = selectElement.options[selectElement.selectedIndex].value;
                retriveCongiguration(templateGuid, method);

            } catch (e) {
                alert(e);
            }
        }
        function retriveCongiguration(templateGuid, method) {
            var obj = window.dialogArguments;
            var entityId = window.dialogArguments.Xrm.Page.data.entity.getId();
            var entityName = window.dialogArguments.Xrm.Page.data.entity.getEntityName();
                 

            var query = "<a:ColumnSet>" +
                              "<a:AllColumns>false</a:AllColumns>" +
                              "<a:Columns xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" +
                                "<b:string>cmm_methodname</b:string>" +
                                "<b:string>cmm_data</b:string>" +
                                "<b:string>cmm_recordguids</b:string>" +
                                "<b:string>cmm_error</b:string>" +
                              "</a:Columns>" +
                            "</a:ColumnSet>" +
                            "<a:Criteria>" +
                              "<a:Conditions />" +
                              "<a:FilterOperator>And</a:FilterOperator>" +
                              "<a:Filters>" +
                                "<a:FilterExpression>" +
                                  "<a:Conditions>" +
                                    "<a:ConditionExpression>" +
                                      "<a:AttributeName>cmm_methodname</a:AttributeName>" +
                                      "<a:Operator>Equal</a:Operator>" +
                                      "<a:Values xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" +
                                        "<b:anyType i:type='c:string' xmlns:c='http://www.w3.org/2001/XMLSchema'>" + method + "</b:anyType>" +
                                      "</a:Values>" +
                                    "</a:ConditionExpression>" +
                                    "<a:ConditionExpression>" +
                                      "<a:AttributeName>cmm_recordguids</a:AttributeName>" +
                                      "<a:Operator>Equal</a:Operator>" +
                                      "<a:Values xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" +
                                        "<b:anyType i:type='c:string' xmlns:c='http://www.w3.org/2001/XMLSchema'>" + entityId + "</b:anyType>" +
                                      "</a:Values>" +
                                    "</a:ConditionExpression>" +
                                    "<a:ConditionExpression>" +
                                      "<a:AttributeName>cmm_data</a:AttributeName>" +
                                      "<a:Operator>Equal</a:Operator>" +
                                      "<a:Values xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" +
                                        "<b:anyType i:type='c:string' xmlns:c='http://www.w3.org/2001/XMLSchema'>" + entityName + "," + templateGuid + "</b:anyType>" +
                                      "</a:Values>" +
                                    "</a:ConditionExpression>" +
                                  "</a:Conditions>" +
                                  "<a:FilterOperator>And</a:FilterOperator>" +
                                  "<a:Filters />" +
                                "</a:FilterExpression>" +
                              "</a:Filters>" +
                            "</a:Criteria>" +
                            "<a:Distinct>false</a:Distinct>" +
                            "<a:EntityName>cmm_thirdpartyintegrationlog</a:EntityName>" +
                            "<a:LinkEntities />" +
                            "<a:Orders />" +
                            "<a:PageInfo>" +
                              "<a:Count>0</a:Count>" +
                              "<a:PageNumber>0</a:PageNumber>" +
                              "<a:PagingCookie i:nil='true' />" +
                              "<a:ReturnTotalRecordCount>false</a:ReturnTotalRecordCount>" +
                            "</a:PageInfo>" +
                            "<a:NoLock>false</a:NoLock>";

            var retrievedWebService = XrmServiceToolkit.Soap.RetrieveMultiple(query);

            //debugger;
            if (retrievedWebService.length != 0) {
                if (retrievedWebService[0].attributes['cmm_error'] != null) {
                    alert(retrievedWebService[0].attributes['cmm_error'].value);
                    window.close();
                    return;
                }
            }
                          
             var currShipment = XrmServiceToolkit.Soap.Retrieve("cmm_shipment", entityId, ["cmm_returndata"]);
            var returnValue = currShipment.attributes.cmm_returndata.value;

            window.dialogArguments.Xrm.Utility.openEntityForm("email", returnValue);
            window.close();
        }

        function addOrRemoveRecievers() {
            window.dialogArguments.Xrm.Page.data.entity.getEntityName();
        }

        </script>
    
    
    
    <br>
    <form>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        Select Template : <select id="templateList" style="width: 250px; height: 30px;" onchange="addOrRemoveRecievers">
        </select>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <button class="myButton" id="button" style="padding: 5px 15px;" onclick="sendTemplate('send')" type="button">Send</button>
        </form>
        <br>
        <br>
        <br>


</body></html>

标签: javascripthtmlmicrosoft-dynamics

解决方案


推荐阅读