我怎么能运行这个脚本时,标签重新加载(chrome扩展)
How can I run this script when the tab reloads (chrome extension)?
所以我想运行一个脚本时,标签重新加载在指定的URL。它几乎工作,但实际上id没有:)这是我的清单文件:
{
"manifest_version": 2,
"name": "Sample Extension",
"description": "Sample Chrome Extension",
"version": "1.0",
"content_scripts":
[
{
"matches": ["http://translate.google.hu/*"],
"js": ["run.js"]
}
],
"permissions":
[
"activeTab",
"tabs"
],
"browser_action":
{
"default_title": "Sample",
"default_icon": "icon.png"
}
}
,这是run.js:
chrome.tabs.onUpdated.addListener(
function ( tabId, changeInfo, tab )
{
if ( changeInfo.status === "complete" )
{
chrome.tabs.executeScript( null, {file: "program.js"} );
}
}
);
programs.js只是提醒一些文本(还没有)。当我把警告放到run.js的第一行时,它会发出警告,但当我把它放在if中时,它不会发出警告。我找不到问题所在。我打错什么了吗?
假设您希望在重新加载时向http://translate.google.hu/*
页面注入代码,那么您将不得不以一种稍微不同的方式进行操作。目前,您总是向这些页面注入代码(未经允许这样做),然后尝试在该内容脚本中使用chrome.tabs
api,这是您无法做到的。相反,我们将把侦听器放在一个后台页面中,并只在页面刷新时注入代码,如您所愿。首先是清单:
{
"manifest_version": 2,
"name": "Sample Extension",
"description": "Sample Chrome Extension",
"version": "1.0",
"background": {
"scripts": ["background.js"]
},
"permissions":[
"http://translate.google.hu/*", "tabs"
]
}
background.js
chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){
if (tab.url.indexOf("http://translate.google.hu/") > -1 &&
changeInfo.url === undefined){
chrome.tabs.executeScript(tabId, {file: "program.js"} );
}
});
这将监听onUpdated
事件,检查它是否是我们想要注入的url
事件之一,然后检查页面是否被重新加载。最后一步通过检查changeInfo.url
是否存在来完成。如果是,那么这意味着url被更改了,因此没有刷新。相反,如果它不存在,那么页面一定只是刷新过。
2021
如果你想在manifest 3(也许也是2)中检测从background.js重新加载,chrome.tabs.onUpdated方法对我不起作用:/它被调用了太多次。
这对我来说最终是有效的!
// --- On Reloading or Entering example.com ---
chrome.webNavigation.onCommitted.addListener((details) => {
if (["reload", "link", "typed", "generated"].includes(details.transitionType) &&
details.url === "http://example.com/") {
codeAfterReload();
// If you want to run only when the reload finished (at least the DOM was loaded)
chrome.webNavigation.onCompleted.addListener(function onComplete() {
codeAfterReloadAndFinishSomeLoading();
chrome.webNavigation.onCompleted.removeListener(onComplete);
});
}
});
更多的转换类型:https://developer.chrome.com/docs/extensions/reference/history/#transition_types
祝你好运
content_scripts
在每次页面(重新)加载时都运行,所以最好只使用它们来检测它。
这样,在content_script
准备好接收任何消息之前,您也不会冒险在background
中运行任何代码。
- 内容安全策略:无法在Chrome扩展中加载Google API
- 在Chrome扩展中加载外部javascript
- 数据表 AJAX 筛选器重新加载数据
- HTML 页面在通过 Chrome 扩展程序加载时显示不正确
- 如何在chrome扩展中加载Google Analytics和Facebook SDK
- chrome扩展在加载dom之前注入动态css
- 检查Chrome扩展中加载的页面
- Chrome扩展无法加载页面
- 如何在新加载的页面上执行(下拉)操作
- 根据上一个选项卡的选择器重新加载选项卡
- Chrome扩展程序:加载并执行外部脚本
- 获得“中止,因为不接受 0”并使用反应热加载器重新加载整页
- 咕噜咕噜的手表:实时加载重新加载落后 1 步....
- 从火狐扩展中加载的脚本传递对象
- Firefox 扩展:在加载之前访问 DOM
- 如何为新加载的元素提供JQuery UI工具提示
- 动态扩展动态加载的DIV的宽度
- 在铬扩展中加载聚合物1.0时出现问题
- 列出并调用firefox扩展中新加载的选项卡中的js函数
- Chrome扩展:在加载特定页面时在新选项卡中打开链接