Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 从CRM onLoad到eventListener再到iFrame的多个postMessage_Jquery_Events_Post_Iframe_Dynamics Crm - Fatal编程技术网

Jquery 从CRM onLoad到eventListener再到iFrame的多个postMessage

Jquery 从CRM onLoad到eventListener再到iFrame的多个postMessage,jquery,events,post,iframe,dynamics-crm,Jquery,Events,Post,Iframe,Dynamics Crm,javascript有点新。我在Dynamics CRM实体的iFrame中嵌入了一个html web资源。我可以很容易地从iFrame获取输入以填充CRM,但在将数据从CRM发回iFrame时遇到问题。我可以得到1或2个属性来填充,但似乎比这更不能(除非我一步一步地通过调试器然后对所有人都有效)。似乎有一些时间上的问题。我试图填充总共28个字段,但在下面的代码中仅显示少数字段作为示例。我使用以下参考资料来帮助我做我正在做的事情: 函数formLoad() { var iFrame=Xrm.P

javascript有点新。我在Dynamics CRM实体的iFrame中嵌入了一个html web资源。我可以很容易地从iFrame获取输入以填充CRM,但在将数据从CRM发回iFrame时遇到问题。我可以得到1或2个属性来填充,但似乎比这更不能(除非我一步一步地通过调试器然后对所有人都有效)。似乎有一些时间上的问题。我试图填充总共28个字段,但在下面的代码中仅显示少数字段作为示例。我使用以下参考资料来帮助我做我正在做的事情:

函数formLoad()
{
var iFrame=Xrm.Page.ui.controls.get('iFrame_name').getObject();
var a=Xrm.Page.getAttribute(“a”).getValue();
iFrame.contentWindow.postMessage({'a':a},'*');
var b=Xrm.Page.getAttribute(“b”).getValue();
iFrame.contentWindow.postMessage({'b':b},'*');
var c=Xrm.Page.getAttribute(“c”).getValue();
iFrame.contentWindow.postMessage({'c':c},'*');
//等等。。。。。。。
}
$(文档).ready(函数(){
$(窗口).on('message',函数(事件){
//重要信息。仅接受来自可信来源的邮件。
如果(~event.originalEvent.origin.indexOf('https://URL')){
var messageData=event.originalEvent.data;
if(messageData.a)
document.getElementById(“a”).value=messageData.a;
if(messageData.b)
document.getElementById(“b”).value=messageData.b;
if(messageData.c)
document.getElementById(“c”).value=messageData.c;
//……等等
否则{
回来
}
})
})

同样,如果我正在通过IE调试器,这会让我觉得有一些时间问题。我是否以错误的方式处理此问题?我是否应该为多个帖子添加一些内容,或者一次处理多个帖子?任何额外的眼睛都会有帮助。谢谢。

这可能是因为您的表单onLoad函数是invo在加载iframe之前,事件监听器已被禁用,因此事件监听器尚未连接,但如果在iframe javascript主函数中放置调试器,您将看到它将在执行CRM表单onLoad(非您从CRM调用的任何其他函数)后被命中。我认为它在调试中起作用,因为浏览器强制所有文件完全加载要允许调试,然后连接事件侦听器,请尝试从crm onload函数连接事件,或者至少确保iframe已完全加载

而不是$(document).ready(function(){…}确保它是“RealyStand”,并在它传递消息之前加载它?是的,但是考虑到IFRAME有它自己的文档,当您尝试调用POST消息时,它可能没有被加载和准备好。{窗口{文档
function formLoad()
        {
            var iFrame = Xrm.Page.ui.controls.get('IFRAME_name').getObject();

            var a = Xrm.Page.getAttribute("a").getValue();
            iFrame.contentWindow.postMessage({ 'a': a }, '*');

            var b = Xrm.Page.getAttribute("b").getValue();
            iFrame.contentWindow.postMessage({ 'b': b }, '*');

            var c= Xrm.Page.getAttribute("c").getValue();
            iFrame.contentWindow.postMessage({ 'c': c }, '*');

    //etc.......
        }

        <script>
            $(document).ready(function(){


                $(window).on('message', function (event) {

                        // Important. Only accept messages from trusted origins.
                        if(~event.originalEvent.origin.indexOf('https://URL')){
                            var messageData = event.originalEvent.data;
                            if (messageData.a)
                            document.getElementById("a").value = messageData.a;
                            if (messageData.b)
                                document.getElementById("b").value = messageData.b;
                            if (messageData.c)
                                document.getElementById("c").value = messageData.c;
                             //.......etc
    else{
                            return;
                        }
                    })

           })
</script>