0
我正在做一些需要自动生成元素ID的实验,我决定使用chrome扩展。chrome.browserAction.onClicked无法触发
但是,内容脚本仅在登陆该网站的主页时触发(例如https://secure.checkout.visa.com/)。一旦我导航到其他页面(例如点击“创建帐户”),该脚本没有被触发,我试图在内容脚本上设置一个断点,但它只在主页上触发,但不在创建帐户上页。
有什么想法这里出了什么问题?下面是代码:
// manifest.json
{
"manifest_version": 2,
"name": "Chrome Auto Gen ID",
"description": "Generate IDs",
"version": "1.0",
"permissions": ["activeTab"],
"background": {
"scripts": ["event_page.js"],
"persistent": false
},
"browser_action": {
"default_title": "Auto generate ID"
},
"content_scripts": [
{
"matches": ["https://secure.checkout.visa.com/*"],
"js": ["jquery-3.2.1.min.js", "auto_gen_id.js"],
"all_frames": true,
"run_at": "document_idle"
}
]
}
内容脚本:
// auto_gen_id.js
var divs = document.getElementsByTagName("div");
var inputs = document.getElementsByTagName("input");
var sections = document.getElementsByTagName("section");
var count = 0;
function genId(list) {
for (var i = 0; i < list.length; ++i) {
var element = list[i];
if (element.hasAttribute("id")) {
continue;
}
element.id = "gen-id-" + count++;
}
}
genId(divs);
genId(inputs);
后台脚本:
// event_page.js
chrome.browserAction.onClicked.addListener(function(tab) {
console.log('Generating IDs on ' + tab.url);
chrome.tabs.executeScript(null, {file: "auto_gen_id.js"});
});
这听起来像你试图修改的页面是一个“单页网站”。这意味着它仅使用一个实际页面和AJAX来加载新内容,而不是实际加载新页面。我不打算去现场确认,但你的问题是典型的这样的网页。请参阅:[是否存在JavaScript/jQuery DOM更改侦听器?](https://stackoverflow.com/a/39508954),以了解检测页面更改时间的方法。 – Makyen
除了上述评论之外,您还需要两次注入内容脚本 - 点击并通过manifest.json中的声明自动运行指定的内容脚本。 – wOxxOm