Расширение Chrome - переопределить файл .js - PullRequest
5 голосов
/ 28 октября 2011

Существует веб-сайт с определенной ошибкой в ​​файле JS.На файл JS ссылаются только в одном месте:

    <script type="text/javascript" charset="utf-8" src="/r/js/no-closure/dialogs.js?v=2"></script>

Я скачал файл JS и исправил ошибку.Можно ли как-нибудь через расширение chrome переопределить /r/js/no-closure/dialogs.js с моим dialogs_fixed.js?

, который я пробовал (в background.js):

var script = $('[src*="dialogs.js"]');
script.attr("src", "dialogs_patch.js");

Нетудачи.

Ответы [ 2 ]

6 голосов
/ 05 января 2012

Для этого вам не нужно использовать экспериментальный webRequest, вы можете просто использовать событие beforeload.Нечто подобное должно работать ....

String.prototype.endsWith = function(pattern) {
    var d = this.length - pattern.length;
    return d >= 0 && this.lastIndexOf(pattern) === d;
};

document.addEventListener('beforeload', function(event) {
if (event.url.endsWith("/r/js/no-closure/dialogs.js?v=2")){event.srcElement.src=chrome.extension.getURL("dialogs.js");}
}, true);

.. поместите это в скрипт контента, нацеленный на интересующую вас страницу. И убедитесь, что этот скрипт контента загружен раньше, чем страница, добавив ...

"run_at" : "document_start"

... в поле ваших скриптов контента ....

http://code.google.com/chrome/extensions/content_scripts.html

РЕДАКТИРОВАТЬ Хотя следует отметить,Начиная с Chrome 17 API-интерфейс веб-запроса больше не является экспериментальным и является отличным способом перенаправления.

5 голосов
/ 28 октября 2011

Вы должны иметь возможность заблокировать его с помощью экспериментального webRequest api:

chrome.experimental.webRequest.onBeforeRequest.addListener(function(details) { 
    return {cancel: true}; 
}, {urls: ["http://www.example.com/r/js/no-closure/dialogs.js"]}, ["blocking"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...