2014-01-09 1 views
0

В названии говорится, что я очень новичок в chrome-расширениях (это мое первое расширение).Как получить доступ к текстовому полю, определенному в popup.html из сценариев контента

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

Мой popup.html выглядит следующим образом:

<html> 
    <body> 
     <p>Name: <input type="text" id="test" value="Mickey Mouse"></p> 
    </body> 
    </html> 

и мой сценарий содержание имеет:

$(document).ready(function(){ 
    alert("Value: " + $("#test").val()); 
    }); 

и manifest.json является:

{ 
    "manifest_version": 2, 

    "name":... 
    , 

    "browser_action": {... 
    }, 

    "content_scripts": [ 
    { 
     "matches": ["http://*/*"], 
     "js": ["jquery.js","script.js"] 
    } 
    ] 
    } 

но веб-страница всегда показывает:

enter image description here

+0

Вы хотите, чтобы предупреждение появлялось, когда всплывающее окно отображается или когда какая-либо страница загружается на вкладку? – gkalpak

+0

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

+0

Вы не можете получить доступ к полю во всплывающем окне, если всплывающее окно не отображается. Как только он теряет фокус и скрывается, он выгружается, поэтому вы больше не можете его получить. Что именно вы пытаетесь достичь (предельно)? – gkalpak

ответ

1

Пытаться получить доступ к значению ввода, которое определено на popup.html из сценария контента, никогда не будет работать. Помните, что скрипты содержимого могут просматривать DOM страницы, на которую они вставляются, и ничего еще. (В вашем примере ввод текста сохраняется в DOM popup.html).

Один из способов обойти это использовать message passing. Таким образом, с popup.html вы можете отправить сообщение, содержащее значение ввода текста, в скрипт контента, используя API-интерфейс передачи сообщений.

В popup.html вам нужно будет отправить сообщение в сценарий содержимого. Вы должны знать табетический вкладки, которые вы хотите отправить сообщение, чтобы ... как простой пример то, как это будет отправить содержимое ввода текста в ВСЕХ активных вкладок:

chrome.tabs.query({}, function(tabs) { 
    for(var i = 0; i < tabs.length; i++) { 
    chrome.tabs.sendMessage(tabs[i].id, {txt : $("#test").val()}, function(response) { 
     console.log(response); 
    }); 
    } 
}); 

И если ваш скрипт контента вам понадобится слушатель, что-то вроде:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
    //Do stuff with the request here 
    console.log(request); 
} 
+2

Фрагмент выше не будет отправлять сообщение на ** ВСЕ ** активные вкладки; только на первую активную вкладку окна, в котором отображается всплывающее окно. Кроме того, 'chrome.extension.onMessage' устарел; Вместо этого следует использовать chrome.runtime.onMessage'. – gkalpak

+0

Вы, конечно, правы. Я отредактировал ответ с вашими исправлениями. – berrberr

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