javascript有点新鲜。我在Dynamics CRM实体的iFrame中嵌入了一个html Web资源。我可以轻松地从iFrame中获取输入以填充CRM,但是在将数据从CRM回发到iFrame时遇到了问题。我可以获得1或2个属性来填充,但似乎不再是我不能(除非我单步执行调试器然后适用于所有)。似乎有一些时间问题或其他问题。我试图总共填充28个字段,但仅在下面的代码中显示一些作为示例。我使用以下参考资料来帮助我做我正在做的事情:
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>
同样,如果我单步调试IE调试器,这会让我认为存在一些时序问题。我是以错误的方式接近这个吗?有什么我应该为多个帖子添加或一次处理多个帖子?任何额外的眼睛都会有帮助感谢。
答案 0 :(得分:1)
这可能是因为你的表单onLoad函数是在加载iframe之前调用的,所以事件监听器还没有附加,但如果你把一个调试器放在iframe javascript main函数中,你会发现它会在CRM表单之后被调用onLoad - 其他任何函数都不是您从CRM函数调用的函数是Executed。我认为它可以在调试中工作,因为浏览器会强制所有文件被完全加载以允许调试,然后连接事件监听器,尝试从crm onload函数附加事件或至少确保iframe完全加载< / p>