2012-05-08 3 views
2

Я пытаюсь создать расширение для Chrome, но я новичок, и мне трудно понять Документы, предоставленные Google. Я хочу, чтобы расширение имело всплывающее окно с несколькими кнопками, и когда нажимается кнопка, я хочу запустить скрипт.Из popup.html, как я могу запустить функцию javaxcript кнопкой onclick?

Это моя установка:

popup.html

<button id="test1" onclick="getSite();">button 1</button>
<button id="test2" onclick="getSite();">button 2</button>

content_script.js

function getSite(){alert('getSite works!');}

У меня возникли проблемы с пониманием, как использовать хром javascript api, так как я другие говорят, что используют chrome.tabs.executeScript, но я не могу понять, куда идет эта линия. Может кто-нибудь мне помочь? Я дам тебе печенье! или просто надпись .. или, возможно, и то, и другое?

+0

Оба ниже ответа верны. Вы не можете использовать встроенные атрибуты событий, и вы не можете ссылаться на переменные в своем скрипте контента из всплывающего окна действия вашего браузера. Используйте 'addEventListener' в отдельном JS-файле и используйте передачу сообщений через вашу фоновую страницу. – apsillers

+0

Ohhh .. Думаю, я просто понял это, но я проверю еще до подтверждения. Вот как вы используете 'chrome.tabs.executeScript' Вместо того, чтобы просто вводить' alert ('test'); 'вы пишете ' chrome.tabs.executeScript (null, {code: "alert ('test') "}); window.close(); ' – Jack

+0

Это правильно; вы также можете использовать '{file:" some_file.js "}' для ввода целого файла. Каждая вкладка имеет изолированное исполнение для сценариев расширения, и все они отделены от фонового paage. 'executeScript' - это то, как фоновая страница получает конкретную вкладку для запуска кода. – apsillers

ответ

1

Я думаю, что у вас есть эта проблема из-за ограничений, налагаемых Google Content Security Policy. Он упоминает, что iniline javascript, подобный тому, который вы упомянули в вашем коде, не будет выполнен. Попробуйте удалить onclick="getSite()" с вашей разметки HTML до content_script.js. Используйте функцию addEventListener, чтобы прикрепить событие к кнопке.

+0

Я сделал это так, и кажется, что это работает. Предупреждение показывает, но сразу исчезает. Я предполагаю, что мне придется попробовать, передав сообщение на фоновый рисунок. – Jack

2

Вы не указали, на какой странице вы хотите, чтобы ваши скрипты запускались onclick, на странице Popup.html или странице, на которой пользователь в настоящее время работает в браузере. Если это только popup.html page, в котором вы хотите выполнить свой скрипт, включите их в страницу popup.html.

Если вы хотите выполнить их на странице браузера пользователя, вам необходимо будет отправить сообщение на свою фоновое изображение, которое, в свою очередь, выполнит chrome.tabs.executeScript с идентификатором текущей вкладки и {file: 'yourjsfile.js'} в качестве аргументов.

+0

Попытка это в popup.html: ' ' в теле: ' Кнопка Button3 ' Это не работает функция. Но когда я ссылаюсь на тот же скрипт в content_script.js, всплывающее шоу, хотя и ненадолго. Я уверен, что я делаю что-то неправильно, поэтому я продолжу пробовать это немного больше, но если вы увидите что-то очевидное, пожалуйста, дайте мне знать! – Jack

+0

Я никогда не использовал событие 'DOMContentLoaded'. 'window.onload' вместо этого и проверить, работает ли он для вас? –

+0

Jophin Joseph правильно упомянул ссылку, что вы не можете использовать встроенный javascript в своем' popup.html'. Вам нужно будет поместить все ваши js в файл и загрузить это через тег '