Как получить доступ к страницам jQuery из пользовательского скрипта?

Я хочу написать небольшой пользовательский скрипт на страницу, которая уже содержит jQuery. Я могу получить доступ к объекту $ из консоли разработчика Chrome, но не могу из пользовательского скрипта - он просто говорит, что jQuery || $ || window.jQuery не определен.

PS: пользовательский скрипт устанавливается как расширение.


person yktv4    schedule 15.02.2013    source источник
comment
возможный дубликат Доступ к существующей копии jQuery на цели страница   -  person Brock Adams    schedule 15.02.2013
comment
см. также: title="создание кода ввода расширения Chrome на странице с использованием сценария содержимого"> stackoverflow.com/questions/9515704/ - лучший ответ на этот вопрос должен быть каноническим ответом на вопросы такого типа.   -  person forivall    schedule 20.02.2013


Ответы (2)


Пользовательские скрипты не работают в том же контексте, что и страница. Чтобы получить доступ к среде javascript страницы, вам нужно запустить ее следующим образом:

var execute = function (body) {
    if(typeof body === "function") { body = "(" + body + ")();"; }
    var el = document.createElement("script");
    el.textContent = body;
    document.body.appendChild(el);
    return el;
};

execute(function() {
    $.noop();
}

Бонус: вы также можете загружать внешние скрипты из CDN.

var load = function (src, on_load, on_error) {
    var el = document.createElement("script");
    el.setAttribute("src", src);
    if (on_load != null) { el.addEventListener("load", on_load); }
    if (on_error != null) { el.addEventListener("error", on_error); }
    document.body.appendChild(el);
    return el;
};
load("//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js", function () {
    execute(function(){$.noop();});
});
person forivall    schedule 15.02.2013

Вы должны включить jQuery в сам пользовательский скрипт, неважно, есть он на странице или нет.

Обновление. Мой добрый друг Брок (спасибо за предупреждение!) сообщает мне, что предыдущая ссылка бесполезна для расширений Chrome, поэтому я нашел несколько других ссылок, информирующих как включить jQuery для Chrome (вы должны добавить его в файл manifest.json)

Jquery в расширении Chrome
http://blog.michael-forster.de/2009/08/using-jquery-to-build-google-chrome.html

И дополнительная информация о файле manifest.json
http://developer.chrome.com/extensions/manifest.html

person Brian Fitzpatrick    schedule 15.02.2013
comment
Это разумный подход (не полагайтесь на jQuery страницы), но эта ссылка не применяется к пользовательским скриптам Chrome. В этом случае, поскольку ОП говорит, что он установлен как расширение, он может включить jQuery через файл manifest.json. - person Brock Adams; 15.02.2013
comment
Я удалил старую ссылку, на которую ссылается Брок, потому что не смог сохранить свое редактирование из-за проблем с репутацией. Вот ссылка, на которую ссылается Брок, если интересно ссылка - person Brian Fitzpatrick; 16.02.2013