亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在瀏覽器擴展中加載頁面之前執行 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 關注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號