gpt4 book ai didi

javascript - 用于加载页面并注入(inject)代码的 Chrome 扩展

转载 作者:行者123 更新时间:2023-12-03 12:33:23 24 4
gpt4 key购买 nike

我正在尝试创建一个简单的扩展,它将加载给定页面并在页面加载后注入(inject)代码。

我想出了以下内容,我这样做的方法正确吗?

背景.js

    chrome.tabs.getCurrent(function (tab) {
chrome.tabs.update(tab.id, {url: "http://www.EXAMPLE.COM"});
});

chrome.tabs.onUpdated.addListener(function(tabId , info) {
if (info.status == "complete") {
chrome.tabs.executeScript(null, {file: "content_script.js"});
}
});

最佳答案

引用chrome.tabs documentation对于chrome.tabs.getCurrent:

Gets the tab that this script call is being made from. May be undefined if called from a non-tab context (for example: a background page or popup view).

要获取当前事件的选项卡,您应该使用 chrome.tabs.query:

chrome.tabs.query({currentWindow: true, active: true}, function(tabs){
// Do something with tabs[0]
});

或者,如果您对用户输入使用react,例如单击浏览器操作,则已经为您提供了当前选项卡:

chrome.browserAction.onClicked.addListener(function(tab){
// "tab" is the current active tab
});
<小时/>

您可以简单地创建一个新选项卡(当然,这取决于您想要实现的目标),而不是抓取已打开的选项卡:

chrome.tabs.create({url: "http://www.EXAMPLE.COM"});
<小时/>

每当任何选项卡(而不仅仅是您创建的选项卡)完成加载时,您的监听器都会尝试将内容脚本注入(inject)当前选项卡(您使用了 null)。从 create/update 回调中执行此操作更安全,即

chrome.tabs.update(tab.id, {url: "http://www.EXAMPLE.COM"}, function(tab){
chrome.tabs.executeScript(tab.id, {file: "content_script.js"});
});

注意:您不必担心此时页面尚未完成加载。 executeScript 遵循 run_at parameter ,默认为“加载 DOM 后的某个时间”。

关于javascript - 用于加载页面并注入(inject)代码的 Chrome 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com