Chrome扩展本应在所有Facebook页面上运行,但只有当我点击刷新时才会运行
Chrome Extension which is supposed to run on all Facebook pages only runs when I hit refresh
这是我编写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。我确信这是件愚蠢的事。。。有什么想法吗?
mtk
所说,这是因为当你点击主页按钮或其他按钮时,Facebook会使用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);
显而易见,这是不可能的。facebook页面正在进行大量ajax调用,因此页面不会完全重新加载。这里需要的是确定浏览器是否接收到ajax调用响应?然后触发所需的事件。我不能评论这部分,因为在这方面我还是个新手。
我认为您可能已经在$(function () {})
中编写了代码,这显然需要页面加载。但是,如果页面DOM发生变化,您希望运行代码,那么这可能会有所帮助:
document.addEventListener('DOMNodeInserted', function (event) {
});
更多信息:http://reminiscential.wordpress.com/2011/10/04/building_google_reader_plugin/
相关文章:
- 使用JQuery运行php并刷新页面是不起作用的
- 无法使用javascript插件在首次运行时加载实际图像大小(图像在刷新后加载)
- 在页面加载/刷新时在后台运行扩展
- PHP-如何让别人可以'不要更改url中的参数,也不要在刷新页面时再次运行脚本
- 如何连续运行计时器?(当你刷新时,不要从头开始)
- 如何重新运行Meteor出版物以刷新客户端上收藏的内容
- Sublime Text - 在不刷新 Eclipse 项目的情况下在 apache tomcat 上运行项目
- Chrome 扩展程序,每分钟刷新一次页面,并在每次刷新时运行 (javascript) 脚本
- 无法在不刷新的情况下运行多个 AJAX 调用
- 页面刷新,javascript 未运行
- 除非刷新,否则 AngularJS 不会运行控制器
- 如果网站刷新,则阻止 php 调用的 mysql 服务器运行
- 流星在刷新时运行代码,而不是渲染
- 网站只有在Chrome上缓存刷新时才能完全运行,在其他浏览器上运行良好
- PHP 在进程运行时刷新临时表单
- Chrome扩展本应在所有Facebook页面上运行,但只有当我点击刷新时才会运行
- JQuery mobile:在页面刷新后运行代码
- jquery脚本仅在页面刷新时运行
- Safari在服务器端的刷新/加载前不运行回调函数(调用客户端代码)
- 在不刷新视频的情况下,从外部源调整正在运行的flash视频的大小