为了账号安全,请及时绑定邮箱和手机立即绑定

如何在浏览器扩展中加载页面之前执行 js 文件?

如何在浏览器扩展中加载页面之前执行 js 文件?

噜噜哒 2022-10-13 17:15:42
这是我的配置:  "content_scripts": [    {      "matches": ["https://www.baidu.com/"],      "js": ["./baidu/baidu.js"]    }  ]这是我的baidu.js  // #region delete useless DOM  const deleteIdList = [    '#s_top_wrap',    '#bottom_layer',    '#lm-new',    '#s-top-left',    '#u1',    '#s-hotsearch-wrapper',    '#s_side_wrapper'  ];  deleteIdList.forEach(v => {    const element = document.querySelector(v);    element.style.display = 'none';    // element.parentNode.removeChild(element);  });我想要的很简单,我只希望当我访问时baidu.com,无用的 dom 可以被删除(或隐藏)。我的问题是我的配置有效,但无用的 dom 会在开始时闪烁。然后那些消失了。我希望当我看到网络时,一切都好。我试图将属性指定run_at为document_start. 然后我的 js 文件不起作用。我怎样才能做到?(在火狐浏览器中测试)
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

"run_at": "document_start"在内容脚本声明中是绝对必要的。
内容脚本将在页面为空时运行,因此我们还需要以下内容之一:

  • 使用MutationObserveron观察正在构建的页面document例如,检查添加的节点并隐藏与 id 列表匹配的节点。

  • 或者构造一个style带有选择器的元素来隐藏。
    在性能方面,它的速度要快几个数量级。也更简单。

hideSelectors([

  '#s_top_wrap',

  '#bottom_layer',

  '#lm-new',

  '#s-top-left',

  '#u1',

  '#s-hotsearch-wrapper',

  '#s_side_wrapper',

]);


function hideSelectors(sels) {

  const el = document.createElement('style');

  el.textContent = sels.join(',') + '{ display: none !important }';

  // there's no <head> at this point so we're adding to <html>

  // which is allowed in DOM despite violating the HTML specification

  document.documentElement.appendChild(el);

}


查看完整回答
反对 回复 2022-10-13
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号