首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Chrome扩展,它应该在所有Facebook页面上运行,只有当我点击刷新时才运行

Chrome扩展,它应该在所有Facebook页面上运行,只有当我点击刷新时才运行
EN

Stack Overflow用户
提问于 2012-04-02 19:15:24
回答 3查看 1.7K关注 0票数 2

这是我写Chrome扩展的第一次黑客攻击。我希望它每次加载Facebook页面时都能执行一些非常简单的JavaScript。它做我想做的一切,除了出于某种原因,它只运行我的脚本时,我点击刷新按钮。如果我点击了Facebook的徽标,或者我从通知中进入了状态,那么脚本就不会运行.直到我点击刷新。

这是我的舱单:

代码语言:javascript
运行
复制
{
    "name": "Anti-social Reader",
    "version": "1.0",
    "description": "Defeats 'social reader' apps on Facebook, by letting you just see the news story directly without installing the app.",
    "content_scripts": [
        {
           "matches": ["http://*.facebook.com/*", "https://*.facebook.com/*"],
           "js": ["kill_social_reader.js"],
           "run_at": "document_end",
           "all_frames": true
        }
     ]
}

我需要它等到document_end,因为它正在修改加载页面的DOM。我肯定这是件愚蠢的事..。有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-02 19:24:34

显然,这是不可能的。facebook页面正在进行大量ajax调用,因此该页面不会完全重新加载。这里需要的是确定浏览器是否已经接收到ajax调用响应?然后触发所需的事件。我不能对这部分发表评论,因为在这方面我还是个新手。

票数 1
EN

Stack Overflow用户

发布于 2012-04-03 06:56:01

正如mtk所说,这是因为Facebook在点击home按钮或其他任何东西时都会使用AJAX调用。要在每次进行AJAX调用时运行代码,您可以劫持XMLHttpRequest。您可以将类似的内容添加到内容脚本中,这样每次打开AJAX请求时,代码都会被调用。您也可以添加一个事件侦听器,以便在运行代码之前等待AJAX请求完成。

代码语言:javascript
运行
复制
(function(open) {
  XMLHttpRequest.prototype.open = function() {
    // add the function you want to run here
    open.apply(null, arguments);
  };
})(XMLHttpRequest.prototype.open);
票数 2
EN

Stack Overflow用户

发布于 2012-04-03 06:22:44

我认为您可能已经在$(function () {})中编写了代码,这显然需要加载页面。但是,如果页面DOM发生变化,则需要运行代码,这可能会有所帮助:

代码语言:javascript
运行
复制
document.addEventListener('DOMNodeInserted', function (event) {

});

更多信息:http://reminiscential.wordpress.com/2011/10/04/building_google_reader_plugin/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9982429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档