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