我正在编写一个chrome扩展程序,需要替换包含某些关键字的facebook帖子的内容。它在页面加载时工作正常,但当我按照facebook中的任何链接时,脚本不会运行。 (因此它适用于主页,但如果我按下“主页”链接,则会在没有此脚本的情况下加载相同的页面)
我有一条控制台日志消息说该脚本已加载,我只会在第一页看到一次。
通过设置
"all_frames": true
,每次加载新页面时,我都设法加载代码
现在,当我点击新页面时,我收到控制台消息,说我在关注链接时已加载(事实上,即使我没有关注链接,我也多次收到该消息)
我使用jquery和
搜索了要检查的div标签$("div.userContentWrapper").each(function( index ) {
check_node($(this));
});
在第一页加载时刷新页面时效果很好。但是,当稍后重新运行时(以及在控制台日志中得到第二个“已加载”消息之后),它没有找到任何这些div(即使它们显然仍然存在于页面中) - 我尝试过使用setTimeout检查它没有太快运行,但没有成功。
我是如何实现这一目标的?本质上,我想为所有具有“userContentWrapper”类的div运行check_node(),并且我想在每次加载新页面时运行它。
(当页面自动加载新帖子时,我也希望在滚动时运行它,但我正在使用变异观察者进行此操作)
的manifest.json
{
"manifest_version": 2,
"name": "Fad Stopper",
"version": "1.2",
"description": "Removes annoying fads from Facebook and Twitter",
"content_scripts": [
{
"matches": ["https://twitter.com/*", "*://www.facebook.com/*"],
"js": ["jquery-2.1.1.min.js", "content.js"],
"run_at": "document_end",
"all_frames": true
}
],
"permissions": [
"storage"
],
"options_page": "options.html"
}
content.js(我只列出了重要的代码,而不是整个文件)
console.log('fadstopper loaded! '+Math.random().toString());
$( document ).ready(function() {
console.log( "ready! "+$site );
$("div.userContentWrapper").each(function( index ) {
console.log("Found node");
check_node($(this));
});
});
function check_node($node) {
// Blah blah, do check & replace content if necessary
}
任何帮助都非常感谢!