在微博上看到有人提及不使用定时器实现iframe自适应(onReadyStateChange + onLoad + onResize + onDOMSubtreeModified),然后就去折腾了,这篇与之前的文章:《不使用定时器实现onhashchange》有点类似

 

/*****此方法暂时只支持同域下,跨域的问题有待解决****/

 

以往要使iframe的高度自适应,往往用定时器在跑,这个方法不错。但如果遇到这样的场景,可能会有点问题,就是某个页面嵌入一个app页面(iframe),

而这个app页面,可能经常会发生一些dom的更改,而且是由成千上万的第三方开发者开发的。而且如果定时器一直开着(只要iframe存在),总归不太好~

 

这样就面临着一个问题:

开发者可能需要对DOM进行修改,而iframe的高度如果需要改变,就必须由第三方开发者调用父层的,每一处DOM修改都要调用一次…

把调整iframe高度的方法暴露给第三方开发者,显示不大合适。有没有更好的方法,有,那就是DOMSubtreeModified。

 

在折腾的过程中,其实遇到了很我问题,不过基本上通过google就可以解决掉。某人讲的话还是挺有道理的:“Web前端开发无难点,贵在研究问题的精神和过程,方法论只是结果,价值观才是精髓~”

 

这个属于DOM 3 Level的事件,关于此事件的详情,可以参考以下网址:

MDC DOMSubtreeModified >>

W3C DOMSubtreeModified>>

 

相应的还有DOMAttrModified、DOMNodeInserted、DOMNodeRemoved等等事件

举个DOMSubtreeModified的简单例子:

/**
 * ( modified from Nicholas's book )
 */
function() {
var _EventUtil = {
/**
         * 注册event handler
         */
function( element, type, handler ) {
if( element.addEventListener ) {
false );
if( element.attachEvent ) {
'on' + type, handler );
else {
'on' + type ] = handler;
  16:             }
  17:         },
/**
         * 停止event capturing and bubbling
         */
event ) {
event.preventDefault ) {
event.preventDefault();
else {
false;
  26:             }
  27:         },
/**
         * 获取事件触发的事件源
         */
event ) {
event.srcElement;
  33:         },
/**
         * 获取event对象
         */
event ) {
event;
  39:         }
  40:     }
  41:     window.EventUtil = _EventUtil;
  42: })();

相关文章:

  • 2021-06-10
  • 2022-12-23
  • 2022-02-07
  • 2022-01-26
  • 2021-05-19
猜你喜欢
  • 2022-02-07
  • 2022-02-07
  • 2022-12-23
  • 2022-12-23
  • 2021-12-12
相关资源
相似解决方案