2017-02-23 158 views
0

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

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

в файле манифеста:

"content_scripts": [ 
    { 
    "matches": ["https://www.oddsmonkey.com/*"], 
    "js": ["content.js"], 
    "all_frames": true 
    } 
    ], 
"background": { 
"scripts": ["background.js"] 

В background.js:

chrome.browserAction.onClicked.addListener(function(tab) { 

    alert("Hello! I am an alert box!!"); 

}); 

Очевидно, что все, что происходит при нажатии кнопки мыши на данный момент я получаю окно предупреждения.

Я много оборачивался и не могу найти способ получить страницу background.js (которую я понимаю, требуется для нажатия кнопки) для выполнения content.js. Я вижу концепцию обмена сообщениями, но мне не нужно ничего давать или получать что-либо из скрипта содержимого, я просто хочу, чтобы он запускался!

Надеюсь, это простой вопрос для кого-то ответить.

Приветствия

+0

Чтобы получить доступ к веб-странице вам нужен [содержание сценария] (https://developer.chrome.com/extensions/content_scripts), также [Как получить доступ к веб-странице DOM, а не расширение страницы DOM?] (// stackoverflow.com/q/4532236) и, возможно, [Есть ли JavaScript-редактор jQuery для замещения DOM?] (// stackoverflow.com/a/39508954) – wOxxOm

+0

@wOxxOm У меня есть контент скрипт (и это уже хорошо работает). Мне просто нужно, чтобы он снова запускался, когда пользователь нажимает кнопку! Обнаружение изменений DOM и использование сообщений кажутся чрезмерно сложными, поскольку я подозреваю, что это очень простая задача. – reti

+0

Если ваше пользовательское взаимодействие * начинается * при нажатии пользователем кнопки «browserAction», тогда скрипту содержимого следует вводить ['chrome.tabs.executeScript()'] (https://developer.chrome.com/extensions/ tabs # method-executeScript) вместо записи * manifest.json * 'content_script'. Таким образом, ваш скрипт контента не обременяет браузер, вставляя его на каждую страницу, чтобы ждать, пока он будет использоваться. Используя 'chrome.tabs.executeScript()', скрипт может начать функционировать, когда ему вводят [данные, если они необходимы, которые были переданы ему) (http://stackoverflow.com/a/40815514/ 3773011). – Makyen

ответ

0
chrome.browserAction.onClicked.addListener(function(tab){ 
    chrome.tabs.executeScript(tab.id, { file: 'content.js' }) 
}); 
// this needs an "activeTab" permission. 
+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, что уменьшает читаемость кода и объяснений! – Makyen

+0

По какой-то причине я не мог заставить это работать по своему желанию. Нажатие на значок не приводило к запуску скрипта java, несмотря на то, что это было общим решением моей проблемы. – reti