JavaScript-инъекция в расширении Chrome - PullRequest
2 голосов
/ 29 января 2012

Я новичок в 'разработке расширений для Chrome', и я хотел сделать расширение.
Это расширение должно внедрить код в веб-страницу, когда пользователь нажимает кнопку на всплывающей странице. Я видел разные темы по этому поводу, но кажется невозможным внедрить код, который «взаимодействует» с существующим кодом веб-страницы. Например: переменная с именем test создается, когда пользователь открывает веб-страницу, я хочу получить эту переменную и использовать ее в своем коде (например: alert (test);). Я пробовал несколько способов добиться этого, но это не сработает. Как я могу это сделать? Я попробовал:

chrome.tabs.executeScript(null,{code:"alert('test')"}); 
console.log("alert('test');");

Это сработало, но только для всплывающей страницы, поэтому переменная 'test' не существовала.

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Спасибо, сейчас работает, вот мой код:

Всплывающее:

function makeRequest(act){
chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.sendRequest(tab.id, {action: act, tabid: tab.id}, function(response) { });
});}
//inputs:
<input type="button" id="addDiv" value="Add Div" onClick="makeRequest(this.id);" />
<input type="button" id="addButton" value="Add button" onClick="makeRequest(this.id);" />

contentScript:

function injectCode(text) {
    var script = document.createElement("script");
    var parent = document.documentElement;
    script.text = text;
    script.setAttribute("id", "codeInjection");
    script.setAttribute("extension", "Chrome");
    parent.appendChild(script);
    parent.removeChild(script);
}
var codes = Array();
codes["addDiv"] = "alert('Add a div');";
codes["addButton"] = "alert('Add a button');";
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    switch (request.action) {
        case "addDiv":
            injectCode(codes["addDiv"]);
            break;
        case "addButton":
            injectCode(codes["addButton"]);
    }
});
1 голос
/ 29 января 2012

Ваше восприятие очень верно. Код расширения Chrome не может напрямую взаимодействовать с кодом существующей страницы - они работают в разных, изолированных средах. Однако они разделяют структуру DOM и (HTML5) localStorage, поэтому вы можете использовать один из них для передачи сообщений друг другу, например, путем определения слушателей для изменений DOM.

...