我正在考虑在表单中使用IFRAME,并想知道避免传统IFRAME加载竞争问题的正确方法是什么。
我认为我可以简单地在表单的src
事件处理程序中调用IFRAME的OnLoad
,因为(source):
加载事件在文档加载过程结束时触发。在 至此,文档中的所有对象都在DOM中,而且都是 图像,脚本,链接和子框架已完成加载。
但是MSDN说(粗体添加):
避免使用OnLoad事件。 IFRAMES和网络资源加载 异步,帧可能没有完成加载之前 Onload事件脚本完成。这可能会导致src属性 您更改的IFRAME或Web资源将被覆盖 IFRAME或Web资源URL属性的默认值。
如果是这样,设置IFRAME src
的正确方法是什么?
注意:我考虑过使用IFRAME的OnReadyStateComplete事件,这意味着:在表单的脚本中有一个事件处理程序,在事件触发时设置src
,并使用一个标志来指示它已设置(这样我赢了进入一个无限负载循环),但它似乎是一个旁路。
答案 0 :(得分:1)
我对SetSrc函数没有任何问题,我使用Form OnLoad事件。
一些示例代码
// Get MAT IFrame control
var MATRepiFrame = Xrm.Page.ui.controls.get("IFRAME_MATGraph");
//Setup the URL
MATTargetUrl = serverUrl + '/crmreports/viewer/viewer.aspx?action=run&context=records&id=%7b092E3880-8266-E711-80DD-005056BD212E%7d&recordstype=1&records=' + accountId;
//Set the source
MATRepiFrame.setSrc(MATTargetUrl);
有关详细信息,请参阅此网页:https://msdn.microsoft.com/en-us/library/gg328034.aspx