MS CRM 2011 IFRAME“加载”事件未触发

时间:2015-02-05 10:42:53

标签: jquery iframe dynamics-crm-2011 dynamics-crm onload

我有MS CRM 2011(5.0.9690.2243,按需)HTML网页资源,它在IFRAME中加载实体:

<HTML>
    <HEAD>
        <SCRIPT type=text/javascript src="http://code.jquery.com/jquery-latest.min.js"></SCRIPT>
        <SCRIPT>
        $(document).ready(function(){ 
            if (window.console)
                console.log('doc ready');
            var f=$("#m4_ifr_entity");  
            f.bind('load', function() {
               if (window.console)
                    console.log('iframe loaded');
                // do some stuff here
            });     
        });
        </SCRIPT>
        <META charset=utf-8>
    </HEAD>
    <BODY contentEditable=true>
        <DIV style="WIDTH: 800px; FLOAT: left; HEIGHT: 600px">
            <IFRAME id=m4_ifr_entity height="100%" src="/main.aspx?etn=account&amp;pagetype=entityrecord" width="100%"></IFRAME>
        </DIV>
    </BODY>
</HTML>

执行&#34;预览&#34;时,两个console.log()都出现在控制台中。一切都好。

但是,当我将此网络资源添加到实体作为&#34;导航链接&#34; 然后转到实体并点击导航链接时,只有第一个console.log()出现在浏览器控制台中,而console.log()内的另一个f.bind('load'...不存在,所以我认为根本不会触发IFRAME加载事件。 IFRAME本身加载得很好。

当我将调试器附加到javascript时,我看到f.bind('load', function() {已到达,但调试器没有插入。

我在控制台中看不到任何错误。我做了&#34;发布&#34;的网络资源。在IE 9和IE 11中尝试过。

问题是:为什么在第二个用例中没有执行jQuery f.bind('load'...

2 个答案:

答案 0 :(得分:1)

由于您已经处于不受支持的区域,因此您可能希望进入html Web资源的父窗口(如果存在)并调用某个函数。

在html网络资源中:

function onPreviewLoaded(){
//do something
}

形式javascript:

function onFormLoad(){
if(parent && parent.onPreviewLoaded)
parent.onPreviewLoaded();
}

答案 1 :(得分:0)

事实证明这是由于在加载了IFRAME之后绑定到load事件引起的,因此永远不会执行事件处理程序。

有两种可能的解决方法:

onload放入IFRAME html:

<IFRAME onload="someJsHere()"

或者在src绑定后强制重新加载IFRAME onload(当通过javascript动态地将src添加到IFRAME时,这个也很有用):

f.bind('load', function() {
    if (window.console)
       console.log('iframe loaded');
       // do some stuff here
    });
f.attr('src', f.attr('src'));