内容脚本搜索/替换特定站点上的页面加载

时间:2014-09-23 10:45:26

标签: javascript jquery facebook google-chrome-extension

我正在编写一个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
}

任何帮助都非常感谢!

0 个答案:

没有答案