2013-02-27 2 views
0

Я разрабатываю расширение Chrome. Мой manifest.json является:Как выполнять скрипты на фоне страницы расширения Chrome

"page_action": { 
    "default_icon": { 
     "19": "icons/icon19.png", 
     "38": "icons/icon38.jpg" 
    }, 
    "default_popup": "options.html" 
}, 

В моем расширении я пытаюсь выполнять скрипты, которые пытаются запустить/достичь на реальной веб-странице:

// in options.html 
chrome.tabs.executescript(null,{code:"alert('hello!');"}) ; 

Но расширение Chrome отладчик выводит эту ошибку:

Uncaught TypeError: Object #<Object> has no method 'executescript' 

Я хочу безотлагательно отразить любые изменения в параметрах content_script или фактической веб-страницы.

В области page_action, как я могу достичь объекта «хром»?

+0

Это действительно зависит от того, что вы делаете, но большую часть времени вы должны иметь возможность использовать ContentScript http://developer.chrome.com/extensions/content_scripts.html Это гораздо лучшая практика. –

ответ

2

На данный момент попытайтесь сменить команду executescript на номер executeScript.

executeScript10 и insertCSS в основном используются для вставки файла js или css в заданную вкладку, а не в необработанный код. Они используются, когда вы хотите ввести этот код в очень специфические ситуации. В вашем коде вы не указываете id для какой вкладки вводите код, поэтому он просто вводит его в заданный контекст. Если вы используете chrome.tabs.query, как при передаче сообщения, вы должны будете ввести код в фактическую вкладку.

Похоже, что вы пытаетесь повлиять на какое-то изменение на данной вкладке, когда вы меняете параметры во всплывающем окне от Page Action. Я лично рекомендовал бы использовать jQuery, чтобы внести фактические изменения, используя сообщение, переданное из другого вопроса для отправки сообщения на данную вкладку. Вы можете попробовать сделать это с программной инъекцией css или Javascript, но последующие изменения параметров могут иметь нежелательные результаты.

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

+0

Я сделал это, но он никогда не доходит до объема фактической веб-страницы, просто запуская в изолированной песочнице. – Digerkam

+1

@Digerkam Я обновил свой ответ с дополнительной информацией о 'executeScript' – BeardFist

+0

Подумайте о том, что page_action как всплывающее окно, которое показывает расширение, то, что я выполняю здесь, отражает любые изменения параметров на фактической веб-странице напрямую. Я решаю свои проблемы по вашим ответам, спасибо! – Digerkam

Смежные вопросы