我有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&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'...
?
答案 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'));