Eu sei que isso foi perguntado em vários posts, mas honestamente não os entendi. Eu sou novo em JavaScript, extensões do Chrome e tudo mais e tenho este trabalho de aula. Portanto, preciso fazer um plug-in que conte os objetos DOM em qualquer página usando Solicitações de vários domínios. Consegui fazer isso até agora usando a API de extensão do Chrome. Agora, o problema é que preciso mostrar os dados na minha página popup.html do arquivo contentScript.js. Não sei como fazer isso. Tentei ler a documentação, mas mensagens no Chrome, simplesmente não consigo entender o que fazer.
a seguir está o código até agora.
manifest.json
{
"manifest_version":2,
"name":"Dom Reader",
"description":"Counts Dom Objects",
"version":"1.0",
"page_action": {
"default_icon":"icon.png",
"default_title":"Dom Reader",
"default_popup":"popup.html"
},
"background":{
"scripts":["eventPage.js"],
"persistent":false
},
"content_scripts":[
{
"matches":["http://pluralsight.com/training/Courses/*", "http://pluralsight.com/training/Authors/Details/*", "https://www.youtube.com/user/*", "https://sites.google.com/site/*", "http://127.0.0.1:3667/popup.html"],
"js":["domReader_cs.js","jquery-1.10.2.js"]
//"css":["pluralsight_cs.css"]
}
],
"permissions":[
"tabs",
"http://pluralsight.com/*",
"http://youtube.com/*",
"https://sites.google.com/*",
"http://127.0.0.1:3667/*"
]
popup.html
<!doctype html>
<html>
<title> Dom Reader </title>
<script src="jquery-1.10.2.js" type="text/javascript"></script>
<script src="popup.js" type="text/javascript"></script>
<body>
<H1> Dom Reader </H1>
<input type="submit" id="readDom" value="Read DOM Objects" />
<div id="domInfo">
</div>
</body>
</html>
eventPage.js
var value1,value2,value3;
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
if (request.action == "show") {
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
chrome.pageAction.show(tabs[0].id);
});
}
value1 = request.tElements;
});
popup.js
$(function (){
$('#readDom').click(function(){
chrome.tabs.query({active: true, currentWindow: true}, function (tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "readDom"});
});
});
});
contentScript
var totalElements;
var inputFields;
var buttonElement;
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse){
if(request.action == "readDom"){
totalElements = $("*").length;
inputFields = $("input").length;
buttonElement = $("button").length;
}
})
chrome.runtime.sendMessage({
action: "show",
tElements: totalElements,
Ifields: inputFields,
bElements: buttonElement
});
Qualquer ajuda seria apreciada e por favor, evite qualquer noobness que eu fiz :)
fonte
chrome.tabs.sendMessage
em popupjs echrome.runtime.onMessage.addListener
em content.js porque.tabs
em pop-upjs e.runtime
em content.jsVocê pode usar localStorage para isso. Você pode armazenar quaisquer dados em formato de tabela hash na memória do navegador e acessá-los a qualquer momento. Não tenho certeza se podemos acessar localStorage a partir do script de conteúdo (ele foi bloqueado antes), tente fazer isso sozinho. Veja como fazer isso por meio de sua página de plano de fundo (eu passo os dados do script de conteúdo para a página de plano de fundo primeiro e, em seguida, salvo em localStorage):
em contentScript.js:
em eventPage.js (sua página de plano de fundo):
Então você pode acessar essa variável em popup.js com localStorage ["total_elements"].
Talvez você possa acessar localStorage diretamente do script de conteúdo em navegadores modernos. Então você não precisa passar os dados pela página de fundo.
Boa leitura sobre localStorage: http://diveintohtml5.info/storage.html
fonte
.extension.xxx
, em vez de apenas mostrar o caminho certo (que algumas pessoas podem pensar como " alternativa igualmente OK "). É mais uma questão de estilo, eu acho. Mantenha o bom trabalho !