簡體   English   中英

如何在加載頭之后但在DOM之前運行腳本?

[英]How do I run a script right after the head is loaded, but before the DOM?

制作Google Chrome擴展程序並在加載磁頭后需要運行腳本,因為頭部有腳本,我需要它們才能運行。 在加載DOM之前,因為那里有一個我需要擊敗的內聯腳本。

我該怎么做? 如何檢測頭部負載?

當您注入內容腳本時,在清單中您可以將“run_at”參數聲明為“document_start”,文件將在來自css的任何文件之后注入,但在構造任何其他DOM或運行任何其他腳本之前。 更多信息可以在這里找到。

{
  "name": "My extension",
  ...
  "content_scripts": [
    {
      "matches": ["http://www.google.com/*"],
      "css": ["mystyles.css"],
      "js": ["jquery.js", "myscript.js"],
      "run_at": "document_start"
    }
  ],
  ...
}

*編輯,添加了一個例子。 可以使用其中一種突變事件類型。

的manifest.json

{
  "name": "Content Script test",
  "version": "0.1",
  "description": "Content Script test",
  "content_scripts": [
    {
      "matches": ["http://*/*"],
      "js": ["cs.js"],
      "run_at": "document_start",
      "all_frames": true
    }
  ]
}

cs.js

document.addEventListener('DOMSubtreeModified', OnSubtreeModified, false);

function OnSubtreeModified(event) {
  console.log('Hello from extension!');
  document.removeEventListener('DOMSubtreeModified', OnSubtreeModified, false);
}

test.html(在網上某處)

<html>
<head>
  <script>
    alert('Hello from Web!');
  </script>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>

結果

您將按以下順序發出兩個警報:

  1. 網上好!
  2. 您好,來自分機!

只需將它放在<body>標簽的頂部即可。 腳本執行它們所處的位置並將阻止頁面的其余部分,因此正文頂部的腳本將知道頭部中的所有內容,但不知道仍在加載的其余DOM。 如果將它放在<body>的底部,它仍然會在DOMReady之前和頁面加載事件之前加上你應該能夠訪問腳本之前的DOM元素。 如果你需要動態地將腳本附加到<head>這種方法很有用 - 你不能用<head>的腳本來做到這一點,所以你必須在<body>做到這一點。

[編輯]我的答案通常適用於任何HTML文檔,但Mohamed的答案更直接適用於Google擴展程序。 我傾向於在我的前面接受他的回答,盡管兩者都可能是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM