2014-08-27 6 views
0

Я хочу создать запись контекстного меню, чтобы запустить новую страницу на новой вкладке на основе выделенного текста, а затем код javascript для изменения элементов DOM новой вкладки. Мой manifest.json файл:Расширение Chrome: активная вкладка Javascript

{ 
    "name": "ContextBox", 
    "description": "An experimental context menu addition", 
    "version": "0.5", 

    "permissions": [ 
       "contextMenus" 
       ], 

    "background": { 
     "scripts": ["background.js"] 
    }, 
    "manifest_version": 2 
} 

И мой код из background.js:

. 
    . 
    //this is part of handler for context menu item event onClick 
    window.open('https://www.google.com', '_blank'); 
    setTimeout(prxAsync, 1000); 
} 


function prxAsync(){ 
    chrome.tabs.getSelected(null, function(tab) { 
     chrome.tabs.executeScript(null,{code:"alert('hello');"}); 
    }); 
    return; 
} 

Это просто не работает. Исполнение не работает, но также не показывает ошибок (с использованием try-catch).

ответ

0

Вместо смешивания в window.open вы можете оставаться в пределах API Chrome.

chrome.tabs.create({url: 'https://www.google.com'}, function(tab){ 
    chrome.tabs.executeScript(tab.id, {code:"alert('hello');"}); 
}); 

Отсутствие тайм-аута, без перекрестного поиска.

Для сказания, вам необходимо разрешение хоста для programmatic injection. "activeTab" не поможет вам здесь, так как вы создаете новую вкладку.

"permissions": [ 
    "contextMenus", "https://www.google.com/*" 
], 

Вы можете использовать разрешение одеяла как "<all_urls>", но если у вас есть заданное число страниц, которые вы хотите открыть, лучше перечислить их в явном виде.

+0

Обратите внимание: возможно, что вызов 'executeScript' также требует' 'табуляции' 'разрешения, но это не так. – Xan

+0

Спасибо. Это полностью сработало. У меня была проблема с разрешением, кстати. –

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