这是我写Chrome扩展的第一次黑客攻击。我希望它每次加载Facebook页面时都能执行一些非常简单的JavaScript。它做我想做的一切,除了出于某种原因,它只运行我的脚本时,我点击刷新按钮。如果我点击了Facebook的徽标,或者我从通知中进入了状态,那么脚本就不会运行.直到我点击刷新。
这是我的舱单:
{
"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。我肯定这是件愚蠢的事..。有什么想法吗?
发布于 2012-04-02 19:24:34
显然,这是不可能的。facebook页面正在进行大量ajax调用,因此该页面不会完全重新加载。这里需要的是确定浏览器是否已经接收到ajax调用响应?然后触发所需的事件。我不能对这部分发表评论,因为在这方面我还是个新手。
发布于 2012-04-03 06:56:01
正如mtk
所说,这是因为Facebook在点击home按钮或其他任何东西时都会使用AJAX调用。要在每次进行AJAX调用时运行代码,您可以劫持XMLHttpRequest
。您可以将类似的内容添加到内容脚本中,这样每次打开AJAX请求时,代码都会被调用。您也可以添加一个事件侦听器,以便在运行代码之前等待AJAX请求完成。
(function(open) {
XMLHttpRequest.prototype.open = function() {
// add the function you want to run here
open.apply(null, arguments);
};
})(XMLHttpRequest.prototype.open);
发布于 2012-04-03 06:22:44
我认为您可能已经在$(function () {})
中编写了代码,这显然需要加载页面。但是,如果页面DOM发生变化,则需要运行代码,这可能会有所帮助:
document.addEventListener('DOMNodeInserted', function (event) {
});
更多信息:http://reminiscential.wordpress.com/2011/10/04/building_google_reader_plugin/
https://stackoverflow.com/questions/9982429
复制相似问题