【问题标题】:OnReadyStateComplete is not firedOnReadyStateComplete 未触发
【发布时间】:2015-06-05 10:24:34
【问题描述】:

我尝试添加 CRM javascript Web 资源并尝试管理 iframe 元素,但未触发 iframe OnReadyStateComplete 事件。下面,第一个警报有效,但第二个无效。

function hello()
    {
        var audioPath= Xrm.Page.data.entity.attributes.get("new_audiopath").getValue();
         //var myAudio = document.createElement('audio');
         //myAudio.setAttribute('src', audioPath);
         // myAudio.play(); 

            var IFrame = Xrm.Page.ui.controls.get("IFRAME_Play");
            alert(audioPath);
            //var myAudio =Xrm.Page.ui.controls.get("audioSource");

          IFrame.OnReadyStateComplete=function(){
          alert('iframe ready');
     }
    }

【问题讨论】:

    标签: javascript iframe dynamics-crm dynamics-crm-2015


    【解决方案1】:

    我有类似的问题,但仅限于来自其他领域的 iframe 内容。我认为这是安全限制,不允许引发事件。 我们在服务器上使用 aspx 页面解决了这个问题,该页面下载了内容,并为 xrm 脚本重新创建了它。

    【讨论】:

    • sadi:8090/play.aspx ---> iframe url sadi:5555 ---> 动态crm url 他们在同一个域中。
    • 这里的问题是事件没有被触发。我怀疑这与 XSS 有什么关系,因为在上面的示例中,没有脚本代码试图访问包含窗口中的文档。
    【解决方案2】:

    IFrame 控件没有OnReadyStateComplete 属性或事件。 SDK 文档仅提示表单设计器中可用的菜单选项。

    但是,实际上可以通过支持的方式将函数附加到 IFrame 的 onload 事件:

    var iFrameElement = Xrm.Page.getControl("IFRAME_Play").getObject();
    iFrameElement.addEventListener("load", function() {
        alert("IFrame Play loaded!");
    }
    

    函数getObject 返回一个IFrame 对象,让您可以通过其contentWindowcontentDocument 属性访问iFrame 的窗口及其包含的文档。 (另见HTML DOM IFrame Object。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 2020-11-26
      • 2013-08-28
      相关资源
      最近更新 更多