0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 23
|
|||||||||||
1 | |||||||||||
Chrome Extention Как заставить функцию из content выполняться по запросу background?27.12.2017, 17:34. Показов 4364. Ответов 24
Метки нет (Все метки)
Всем доброго времени суток! Прошу вашей помощи! Есть расширение для Chrome, в нем Background.js который закрывает новые вкладки, если вкладок более заданного. После того как вкладка закрыта, вкладка на которую возвращается браузер, обновляется. После чего срабатывает conent.js в котором прописано нажатие нужной кнопки на удаленном сайте.
Нужно по запросу, только после обновления страницы, нажать на кнопку. На данный момент, кнопка нажимается даже если вручную перейти на страницу. Мне посоветовали использовать sendMessage но он не срабатывает, не могу понять в чем дело. Даже сообщение не срабатывает.
0
|
27.12.2017, 17:34 | |
Ответы с готовыми решениями:
24
Как заставить функцию выполняться в потоке Заставить периодически выполняться функцию Как заставить макрос автоматически выполняться? Как заставить функции выполняться по порядку? |
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 23
|
|||||||||||
27.12.2017, 18:16 [ТС] | 3 | ||||||||||
Прошу прощения. Подставлял от безысходности. сейчас код выглядит так
0
|
27.12.2017, 18:37 | 4 |
BeleK0ss, я так понимаю, в результате ты ждешь, что в консоли что-то появится и это и будет результатом? Не надо этого ждать. Консоль связана с конкретной вкладкой и отправка в нее чего бы то ни было из бэкграунда результата не даст, поскольку он с конкретной вкладкой не связан.
Кроме того, я, видимо, просто не вижу всей картины, но мне непонятно, где это все вызывается. Если весь этот механизм должен запускаться при попытке открыть новую вкладку, то по всей видимости где-то должен быть обработчик вот этого события или чего-то в этом роде. В обработчике прибиваешь новую вкладку и запускаешь весь механизм. Как-то так.
1
|
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 23
|
||||||
27.12.2017, 18:47 [ТС] | 5 | |||||
Вот вся картина:
Нет, я не жду изменений в консоли. Я полагаю что по идее должно выйти сообщение, или если подставить handleTabClick(); из content будет нажата кнопка на странице. Но ни того ни другого не происходит. Если убрать отправку собщений, оставить только функцию нажатия кнопки, кнопка будет нажата. Мне нужно сделать так что бы нажатие вызывалось после срабатывания определенной функции.
0
|
27.12.2017, 19:00 | 6 |
BeleK0ss, собственно ответ нашелся в документации
Добавлено через 1 минуту А 55-я строка для чего?
1
|
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 23
|
||||||
27.12.2017, 19:06 [ТС] | 7 | |||||
Если вписать tabs.sendMessage выдает
extensions::schemaUtils:115 Uncaught Error: Invocation of form tabs.sendMessage(object, function) doesn't match definition tabs.sendMessage(integer tabId, any message, optional object options, optional function responseCallback) at Object.normalizeArgumentsAndValidate (extensions::schemaUtils:115) at Object.<anonymous> (extensions::binding:363) at began (background.js:53) at background.js:91 55 строка была взята из примера. А теперь все гуд, убрал лишний began(); внизу страницы. но всеравно не работает
0
|
27.12.2017, 19:10 | 8 |
Ну надо сначала документацию смотреть. Сигнатура этого метода немного отличается. Здесь надо передавать id вкладки, которой предназначено сообщение.
chrome.tabs.sendMessage
1
|
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 23
|
|
27.12.2017, 19:17 [ТС] | 9 |
Да, вижу... Не подскажите каким образом это можно сделать?
0
|
27.12.2017, 19:22 | 10 | ||||||||||
BeleK0ss, ну например методу began добавить параметр tabId, как-то так
Кстати, если коллбэк не используется, его можно не передавать. Он как раз там - необязательный параметр, в отличие от ид вкладки.
1
|
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 23
|
|||||||||||||||||||||
27.12.2017, 19:31 [ТС] | 11 | ||||||||||||||||||||
Тогда получается вот так
во втором на сам
at began (chrome-extension://gjbjlfmibeieoajjpddlekilgchggmeb/background.js:53:27) at handleTabRemoved (chrome-extension://gjbjlfmibeieoajjpddlekilgchggmeb/background.js:47:2)
0
|
27.12.2017, 19:46 | 12 |
BeleK0ss, до того как ты внёс изменение tab не вызывал вопросов, а теперь вдруг оказалось, что он не определён. Такого ведь не бывает. Значит смотри, что ещё ты изменил. Например непонятно, куда делся второй аргумент функции, который в первоначальном варианте был.
1
|
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 23
|
|||||||||||
27.12.2017, 20:00 [ТС] | 13 | ||||||||||
Да вроде ничего кроме этих функций и не трогал. Если их закоментировать, все работает
Error in event handler for tabs.onRemoved: Error: Invocation of form tabs.sendMessage(undefined, object) doesn't match definition tabs.sendMessage(integer tabId, any message, optional object options, optional function responseCallback) at began (chrome-extension://gjbjlfmibeieoajjpddlekilgchggmeb/background.js:52:15) at handleTabRemoved (chrome-extension://gjbjlfmibeieoajjpddlekilgchggmeb/background.js:47:2)
0
|
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 23
|
|
27.12.2017, 20:09 [ТС] | 15 |
Понял, да была. Добавил её чисто для эксперемента. Но с ней и без нее не чувствует разницы. В целом, пока что вернул.
0
|
27.12.2017, 20:52 | 16 |
BeleK0ss, могу предположить, что причина в перезагрузке страницы. Метод скорее всего выполняется асинхронно и получается, что страница не перезагрузилась, а ты пытаешься до неё достучаться. Попробуй сначала дождаться завершения перезагрузки.
1
|
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 23
|
|
27.12.2017, 22:58 [ТС] | 17 |
Хорошо, спасибо! Завтра попробую.
0
|
28.12.2017, 11:21 | 18 | |||||
BeleK0ss, я положился на твой предыдущий код, думая, что в нем работает все кроме сообщений, но, видимо, ошибся. Смотрим документацию по событию onRemoved.
Во-первых, там первый параметр - не объект с данными о вкладке, а только ее идентификатор, так что tab.id будет в любом случае выдавать undefined и когда ты это использовал для перезагрузки страницы, это уже там не работало. Во-вторых, tabId - это идентификатор удаленной вкладки, так что непонятно, чего ее перезагружать, если она уже удалена. Вместо этого надо запросить активную вкладку того же окна, если оно не закрылось, и работать с ней. То есть, иными словами, код должен выглядеть примерно так
1
|
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 23
|
|
28.12.2017, 11:44 [ТС] | 19 |
Понял. Ошибки ушли. Пол ночи не спал... Теперь, если верить моим наблюдениям, благодаря тебе, он наконец-то начал обращаться исправно к began. Но пока-что еще не происходит нажатие из content.
0
|
28.12.2017, 11:51 | 20 | |||||
Ну опять-таки, вот твой код
1
|
28.12.2017, 11:51 | |
28.12.2017, 11:51 | |
Помогаю со студенческими работами здесь
20
Как в домене заставить выполняться bat-файл? Как заставить процедуру выполняться под админом? Как заставить скрипт выполняться дальше после ошибки? Как заставить команду выполняться ко всем вложенным файлам в папках? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |