Skip to content

adsense 展示广告(创建自定义广告)

1.除了展示自动广告,也可以添加自定义广告,封装后的代码如下(仅供参考)

js
export const isProd = import.meta.env.MODE === 'production';

export const isMobile = function () {
  var isMobileUA =
    /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
      navigator.userAgent,
    );
  var isMobileScreen = window.innerWidth <= 768;
  return isMobileUA || isMobileScreen;
};


export function createGoogleAds (containerId) {
  if (isProd) {
    const container = document.getElementById(containerId);
    if (!container) return;

    // 防重复加载
    if (container.getAttribute('data-ad-loaded') === 'true') return;

    const mobile = isMobile();
    const id = container.getAttribute('data-ad-slot');
    const ADS_ID = container.getAttribute('data-ad-client');
    const width = container.getAttribute('data-ad-width');
    const height = container.getAttribute('data-ad-height');

    const observer = new IntersectionObserver((entries) => {
      const entry = entries[0];
      if (
        entry.isIntersecting &&
        container.getAttribute('data-ad-loaded') === 'false'
      ) {
        container.setAttribute('data-ad-loaded', 'true');

        // 直接对容器(原始 ins)设置样式与属性
        if (mobile) {
          const adHeight = (100 / 1.2) + 'vw';
          container.setAttribute(
            'style',
            `display:block;margin:0 auto;width:100%;height:auto;min-height:${adHeight};`
          );
        } else {
          container.style.display = 'block';
          container.style.width = width ? width : '100%';
          container.setAttribute('data-ad-format', 'auto');
        }
        container.setAttribute('data-ad-client', ADS_ID);
        container.setAttribute('data-ad-slot', id);
        container.setAttribute('data-full-width-responsive', 'true');

        // 监听广告填充状态 - 监听容器本身
        const mo = new MutationObserver(function (mutations) {
          mutations.forEach(function (mutation) {
            if (mutation.type === 'attributes' && mutation.attributeName === 'data-ad-status') {
              const status = container.getAttribute('data-ad-status');
              if (status === 'unfilled') {
                // 填充失败,清理并隐藏容器以释放空间
                container.style.height = '0';
                container.style.minHeight = '0';
                container.style.margin = '0';
                container.style.padding = '0';
                container.style.display = 'none';
                // 如需完全移除节点,可改为:
                // container.remove();
              }
            }
          });
        });
        mo.observe(container, { attributes: true });

        // push 广告
        const script = document.createElement('script');
        script.innerHTML = '(adsbygoogle = window.adsbygoogle || []).push({});';
        container.appendChild(script);

        observer.unobserve(container);
      }
    }, { threshold: 0.1 });

    observer.observe(container);
  }
};

2.使用方法(从adsense 后台创建广告后,复制代码,添加一个id)

id可以用uuid生成工具,保证唯一

html
  <ins class="adsbygoogle"
     data-ad-format="fluid"
     data-ad-width
     data-ad-height
     data-ad-loaded="false"
     id="c6b08980b6be48a891f468c7ec32ae92"
     data-ad-layout-key="xxxxx"
     data-ad-client="xxxxx"
     data-ad-slot="xxxx"></ins>
js
import { createGoogleAds,isProd } from '@/utils/index'

onMounted(() => {
  if (isProd) {
    createGoogleAds('c6b08980b6be48a891f468c7ec32ae92');
  }
})

以上代码仅供参考,根据情况合理展示广告

备案号:豫ICP备17017964号