javascript - Chrome 扩展 - 注入脚本并在非活动选项卡上运行它
问题描述
我有 Chrome 扩展程序,可以在加载时将脚本注入页面。如果是某个页面,它会在该页面上的新选项卡中打开一组链接,并且当加载这些选项卡时,注入的脚本会在选项卡上提交一个表单。问题是注入没有发生在不是当前的选项卡上。它仅适用于当前选项卡。
我的代码的简化版本:
清单.json
{
"name": "name",
"version": "0.0.1",
"manifest_version": 2,
"description": "Doing stuff",
"background": {
"scripts": [
"background.js"
],
"persistent": true
},
"browser_action": {
"default_title": "Bot"
},
"permissions": [
"https://*.url.com/*",
"*://*/*",
"tabs"
]
}
背景.js:
chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
if(changeInfo.status == 'complete') {
try {
chrome.tabs.executeScript(tab.ib, {
file: 'inject.js'
});
} catch(err) {
console.log(" extension cannot run on the chrome:// page ")
}
}
})
注入.js:
(function() {
function page1() {
links = document.querySelectorAll("a.link_class");
for(var link in links) {
link.setAttribute("target", "_blank");
link.click();
}
}
function page2() {
// this does not run in tabs that are inactive
// in order to make it run, i have to click in the inactive tab and reload it manually
document.querySelector("input[name='field_to_update']").text = "setting the field value";
button = document.querySelector("input[name='button']");
button.click();
}
if(document.querySelector("div.page1") != null) {
page1();
} else {
page2();
}
})();
解决方案
推荐阅读
- angular - 为什么页面上显示的值太多?
- php - 在 Laravel 中使用有很多直通关系
- sails.js - 来自数据库适配器的意外错误:`select` 失败(“badConnection”)
- python - 在 Dataframe 上并行化 PySpark 阐述的最佳方法?
- join - 如何在 SAS 的数据集中找到匹配项后创建新变量
- c# - 批量合并(添加和更新)行
- sql - 好与坏以及为什么在 SQL 查询连接中应用复杂查询?
- java - 如何使用 Java 使用 bodyPart.isMimeType("message/rfc822") 读取 .mgs 附件
- laravel - Laravel 按特定列获取下一条/上一条记录
- google-chrome-devtools - Google Chrome DevTools 中的元素选项卡行为不端