Расширение Chrome, которое должно работать на всех страницах Facebook, запускается только после нажатия кнопки «Обновить» - PullRequest
2 голосов
/ 02 апреля 2012

Это мой первый взлом при написании расширения для Chrome.Я хочу, чтобы он выполнял довольно простой JavaScript каждый раз при загрузке страницы Facebook.Он делает все, что я хочу , за исключением , поэтому по какой-то причине он запускает мой скрипт, только если я нажимаю кнопку Обновить.Если, например, я нажал на логотип 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 загруженной страницы.Я уверен, что это что-то глупое ... есть идеи?

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Как сказал 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);
1 голос
/ 03 апреля 2012

Я думаю, вы могли бы написать свой код внутри $(function () {}), что, очевидно, требует загрузки страницы.Но вы хотите запустить свой код, если DOM страницы изменится, тогда это может помочь:

document.addEventListener('DOMNodeInserted', function (event) {

});

Дополнительная информация: http://reminiscential.wordpress.com/2011/10/04/building_google_reader_plugin/

1 голос
/ 02 апреля 2012

Очевидным образом это невозможно. Страница facebook делает многочисленные ajax звонки , поэтому страница не перезагружается полностью. Здесь вам нужно определить, был ли браузер получил ответ на вызов ajax или нет? а затем запуск события требуется. Я не могу комментировать эту часть, так как я все еще новичок в этом отношении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...