Доступ к селектору страницы или экземпляру JQuery из расширения Chrome - PullRequest
0 голосов
/ 17 апреля 2020

Я постараюсь объяснить как можно более кратко.

Я разработал расширение Chrome, и у меня возникли проблемы с некоторыми функциями.

Проблема, с которой я столкнулся, заключается в том, что Мне нужно инициировать некоторые события на веб-сайте, к которому у расширения есть доступ, но некоторые скрипты, работающие на консоли, не работают так же, если выполняются из моего содержимого js расширения Chrome (даже если я использую мой собственная версия jQuery, которую я могу добавить к своему расширению при необходимости).

Пример:

Если я выполню window.$ или jQuery на консоли, она вернет ƒ (a,b){return new n.fn.init(a,b)}. Если я запускаю это в моем сценарии, даже если я жду, пока все загрузится, даже если я установлю ожидание в 10 секунд, прежде чем проверять, чтобы убедиться, что все загружено, это говорит мне, что «$ is undefined», когда у меня нет jQuery на моем Chrome расширении.

Кроме того, console.log(window.$.fn), выполненный из консоли, возвращает Object [jquery: "1.12.4", selector: "", constructor: ƒ, toArray: ƒ, get: ƒ, …], но если я запускаю его из моего скрипта содержимого, активированного jQuery, возвращается Object [jquery: "3.5.0", constructor: ƒ, toArray: ƒ, get: ƒ, pushStack: ƒ, …], так как у меня есть эта версия установлена ​​на расширение.

Мне нужно сделать это (который работает с консоли, но не из сценария содержимого расширения):

$("#id").val(123).val());
$("#id").trigger('keyup');

Я также пробовал родной .dispatchEvent() способ сделать это, но ничего не происходит, он возвращает true при выполнении, но ничего не происходит.

Вот почему я спрашиваю: есть ли способ получить доступ к экземпляру jQuery страницы из внешний файл (в данном случае мой content.js скрипт с расширением chrome)?

Я могу изменить DOM, но этого недостаточно, даже если я по какой-то причине изменил значение входов формы страница делает не признать изменения. Единственный работающий способ, который я нашел, - это запуск вручную события keyup после изменения значения с помощью jQuery, но работает, только если я делаю это с консоли.

Есть подсказка?

1 Ответ

0 голосов
/ 18 апреля 2020

Следуя совету @ wOxxOm, мне удалось добиться того, чего я хотел. Мой предыдущий файл js добавлен как доступный в манифесте:

"web_accessible_resources": ["cont.js"]

Затем я добавил еще один скрипт содержимого, который загружает первый из имеющихся в DOM таким образом:

let url = chrome.runtime.getURL('cont.js');
$("head").first().append("<script src='" + url + "' type='text/javascript'></script>");

Переменные также могут быть определены и доступны со страницы, если вы JSON .stringify их:

let configData = {'obj1':1, 'obj2':2}
$("head").first().append(
    "<script type='text/javascript'>let config = " + JSON.stringify(configData) + "</script>"
);
...