DEV Community

Martin Ratinaud
Martin Ratinaud

Posted on • Edited on

Preventing adsense from injecting min-height and height inline style

On https://www.edityouraudio.com, we use Adsense to monetize our audience in order to keep our service free for all non-intensive users.
This had been a very long time since my layout was sometimes broken, with the footer not being stuck on the bottom of the page, leading to a very ugly layout like this one (with the white bar at the bottom).

Alt Text

This is because adsense is injecting

 

style="height: auto!important;min-height: 0px!important" 
Enter fullscreen mode Exit fullscreen mode

into your main div 😱

Solving the problem with MutationObserver

Mutation observer to the rescue !

constructor(props) {
  super(props);
  this.mainRef = React.createRef();
  this.adSenseInjectorObserver = null;
}

componentDidMount() {
  if (!this.adSenseInjectorObserver && this.mainRef) {
    this.adSenseInjectorObserver = new MutationObserver((mutations, observer) => {
      this.mainRef.current.style.removeProperty('min-height');
      this.mainRef.current.style.removeProperty('height');
    });
    this.adSenseInjectorObserver.observe(this.mainRef.current, {
      attributes: true,
      attributeFilter: ['style'],
    });
  }
}
Enter fullscreen mode Exit fullscreen mode

and

render() {
  return (
    <main ref={this.mainRef}>
      {this.props.children}
    </Main>
  );
}
Enter fullscreen mode Exit fullscreen mode

This will, on component mount, define an observer that will reset the height and min-height everytime it is set directly by Adsense.

Don't forget to disconnect the observer on unmount also.

  componentWillUnmount() {
    if (this.adSenseInjectorObserver) {
      this.adSenseInjectorObserver.disconnect();
      this.adSenseInjectorObserver. = null;
    }
  }
Enter fullscreen mode Exit fullscreen mode

Hire me remotely!

My name is Martin Ratinaud and I’m a senior software engineer and remote enthusiast, contagiously happy and curious.
I create websites, like this one for staking your crypto
I create bots to aggregate data and build Remote Family with them.
I create Backoffices and internal tools for marketers and growth specialists.
I also create chrome extensions and electron apps to sort your paper with AI.
All this in NodeJs and React which I love very much.

Check my LinkedIn and get in touch!

Top comments (0)