」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 建立內容腳本的初學者指南

建立內容腳本的初學者指南

發佈於2024-07-29
瀏覽:274

浏览器扩展是浏览器的附加组件,用于为网站增添美感并提供最佳的用户体验。
扩展开发中的内容脚本概念是开发人员必须掌握的非常有用的知识,因为它显着扩展了浏览器扩展的用例。

本文旨在介绍什么是内容脚本以及它们如何工作。还有一个演示项目,其中将讨论 chrome 扩展的基础知识,并在我们的扩展中使用一个简单的内容脚本。就这样,我们开始吧。

了解内容脚本

首先,什么是内容脚本? 内容脚本是 JavaScript 代码,通过浏览器扩展与网页交互时,执行这些代码来修改网页。

它通过与网页文档对象模型交互轻松实现这一点。网页文档对象模型是给定网页的原始结构。 Chrome 内容脚本修改相关网页的方式通常称为注入

对内容脚本进行了简要介绍后,我们将继续在我们的网页上实现它。但在此之前,我们需要设置浏览器扩展来为脚本提供支持。

设置您的 Chrome 扩展程序

设置 Chrome 扩展文件非常简单。如需进一步参考构建扩展程序,下面附有 Chrome 扩展程序文档页面的链接。
理想的 Chrome 扩展程序必须包含详细的 manifest.json 文件,该文件提供有关 Chrome 扩展程序的默认背景信息。
此外,还包括要执行的相应 JS 文件。其他附加文件(HTML 和 CSS)有助于为扩展提供美感。
有了这个,让我们继续构建我们的扩展,合并我们的内容脚本注入。我们将通过创建一个 Chrome 扩展程序来说明内容脚本的强大功能,该扩展程序会在我们导航到的任何活动网页上显示一个按钮。

编写清单文件

在本节中,将突出显示并讨论清单文件的各个部分。这是项目清单文件的代码。

{
    "manifest_version": 3,
    "name": "Add Button",
    "version": "1.0",
    "description": "An extension that alerts a response when clicked",
    "permissions": ["activeTab"],
    "content_scripts": [
{
        "matches": [""],
        "js": ["ContentScript.js"],
        "CSS": ["Button.css"]
}
]
}

清单版本: 通常会请求清单版本。默认情况下,它设置为 3。因为它是比版本 2 更好的升级。
名称: 扩展名也输入在清单文件中。就我而言,该项目名为“添加按钮”。可以对其进行调整以满足用户的偏好。
还输入 Chrome 扩展程序的版本。在我们的例子中,这是该扩展的第一个版本,因此它被命名为 1.0,对该扩展的后续改进可以提示修改文件以分别增加版本。
描述:对扩展程序功能的描述还可以让扩展程序的非技术用户相信 Chrome 扩展程序。

后续提出的观点在构建内容脚本方面非常有说服力。

权限对象突出显示内容脚本的执行路径。这还可以防止内容脚本在意外的选项卡和网页中运行。它允许我们列出 Chrome 扩展程序可能需要的所有权限。某些 Chrome 扩展程序可能需要访问浏览器存储、其他 Chrome API 和某些相关网站。在我们的这个项目中,我们将 Chrome 扩展限制为仅使用正在使用的活动浏览器选项卡。为了降低 Chrome 扩展程序损害 Chrome 浏览器其他未使用部分的风险,这一点非常重要。

然后我们将在清单文件中配置内容脚本字段。
内容脚本字段指定我们打算注入到网页中的各种代码文件。
它包含匹配子字段,该字段指定我们希望其执行操作的网页 URL。 为了便于使用,我们只包含了所有 URL,允许它在我们访问的所有网页上运行。不过,您可以指定要在子字段值中注入的 URL。例如 www.google.com,

"matches": ["https://*.google.com/*"]
run_at": "document_idle

还指定了包含注入代码的JS文件。在我们的例子中,
我们的 JS 文件名为 Content script.js。我们还指定了用于设计该项目样式的 CSS 文件。

这样,我们就为我们的项目实现了清单文件的微型实现。然后我们将在后续部分继续编写我们的注入代码

创建内容脚本

本着保持简单的精神,我们将创建一个简单的按钮,单击该按钮时会显示一条警报消息。该按钮预计会覆盖现有网页。
下面是代码

// Create a button element
const button = document.createElement("button");

// Set the button's text content
button.textContent = "Click me";

// Set the button's ID
button.id = "clickMe";

// Append the button to the document body
document.body.appendChild(button);

// Add a click event listener to the button
button.addEventListener("click", () => {
  // Show an alert when the button is clicked
  alert("Click event listener was added");

  // Log a message to the console
  console.log("Hello world");
});

样式可以根据您的喜好进行更改,但是样式模板已包含在代码存储库中。

这是其实现的图片。

chrome extension
这是包含代码样式的源代码的链接。

先进技术和用例

到目前为止我们已经完成了该项目。然而,为了增进知识,这里有一些您在构建内容脚本时也可以实施的先进技术和最佳实践。

  • 与浏览器后台脚本的交叉交互
  • 实现数据状态管理器以允许动态脚本编写
  • 集成其他外部 API 可以进行数据操作和分析
  • 采用缓存策略来优化扩展性能
  • 将内容脚本与服务工作者集成

结论

您还可以在我的博客上与我互动,并在此处查看我的其他文章。下次继续编码!

版本聲明 本文轉載於:https://dev.to/oluwatobi2001/a-beginners-guide-to-building-content-scripts-df?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-06-19
  • 為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    在CSS 問題:不正確的代碼: 全球範圍將所有餘量重置為零,如提供的代碼所建議的,可能會導致意外的副作用。解決特定的保證金問題是更建議的。 例如,在提供的示例中,將以下代碼添加到CSS中,將解決餘量問題: body H1 { 保證金頂:-40px; } 此方法更精確,避免了由全局保證金重置...
    程式設計 發佈於2025-06-19
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-06-19
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-06-19
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-06-19
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-06-19
  • 如何正確使用與PDO參數的查詢一樣?
    如何正確使用與PDO參數的查詢一樣?
    在pdo 中使用類似QUERIES在PDO中的Queries時,您可能會遇到類似疑問中描述的問題:此查詢也可能不會返回結果,即使$ var1和$ var2包含有效的搜索詞。錯誤在於不正確包含%符號。 通過將變量包含在$ params數組中的%符號中,您確保將%字符正確替換到查詢中。沒有此修改,PD...
    程式設計 發佈於2025-06-19
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    程式設計 發佈於2025-06-19
  • Python中嵌套函數與閉包的區別是什麼
    Python中嵌套函數與閉包的區別是什麼
    嵌套函數與python 在python中的嵌套函數不被考慮閉合,因為它們不符合以下要求:不訪問局部範圍scliables to incling scliables在封裝範圍外執行範圍的局部範圍。 make_printer(msg): DEF打印機(): 打印(味精) ...
    程式設計 發佈於2025-06-19
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在Java中的多個返回類型:一種誤解類型:在Java編程中揭示,在Java編程中,Peculiar方法簽名可能會出現,可能會出現,使開發人員陷入困境,使開發人員陷入困境。 getResult(string s); ,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但這確實是如此嗎...
    程式設計 發佈於2025-06-19
  • 為什麼HTML無法打印頁碼及解決方案
    為什麼HTML無法打印頁碼及解決方案
    無法在html頁面上打印頁碼? @page規則在@Media內部和外部都無濟於事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: ...
    程式設計 發佈於2025-06-19
  • 如何在其容器中為DIV創建平滑的左右CSS動畫?
    如何在其容器中為DIV創建平滑的左右CSS動畫?
    通用CSS動畫,用於左右運動 ,我們將探索創建一個通用的CSS動畫,以向左和右移動DIV,從而到達其容器的邊緣。該動畫可以應用於具有絕對定位的任何div,無論其未知長度如何。 問題:使用左直接導致瞬時消失 更加流暢的解決方案:混合轉換和左 [並實現平穩的,線性的運動,我們介紹了線性的轉換。...
    程式設計 發佈於2025-06-19
  • 如何在GO編譯器中自定義編譯優化?
    如何在GO編譯器中自定義編譯優化?
    在GO編譯器中自定義編譯優化 GO中的默認編譯過程遵循特定的優化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    程式設計 發佈於2025-06-19
  • 如何處理PHP文件系統功能中的UTF-8文件名?
    如何處理PHP文件系統功能中的UTF-8文件名?
    在PHP的Filesystem functions中處理UTF-8 FileNames 在使用PHP的MKDIR函數中含有UTF-8字符的文件很多flusf-8字符時,您可能會在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    程式設計 發佈於2025-06-19

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3