Je sais que cela a été demandé dans de nombreux messages, mais honnêtement, je ne les comprends pas. Je suis nouveau dans JavaScript, les extensions Chrome et tout et j'ai ce devoir de classe. J'ai donc besoin de créer un plugin qui compterait les objets DOM sur n'importe quelle page donnée en utilisant les requêtes de domaine croisé. Jusqu'à présent, j'ai pu atteindre cet objectif en utilisant les API d'extension Chrome. Maintenant, le problème est que je dois afficher les données sur ma page popup.html à partir du fichier contentScript.js. Je ne sais pas comment faire, j'ai essayé de lire la documentation, mais la messagerie dans Chrome, je ne comprends tout simplement pas quoi faire.
Voici le code jusqu'à présent.
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
});
Toute aide serait appréciée et s'il vous plaît éviter toute noobness que j'ai faite :)
la source
chrome.tabs.sendMessage
dans popupjs etchrome.runtime.onMessage.addListener
dans content.js pourquoi.tabs
pour popupjs et.runtime
dans content.jsVous pouvez utiliser localStorage pour cela. Vous pouvez stocker toutes les données dans un format de table de hachage dans la mémoire du navigateur et y accéder à tout moment. Je ne suis pas sûr que nous puissions accéder à localStorage à partir du script de contenu (il était auparavant bloqué), essayez de le faire vous-même. Voici comment le faire via votre page d'arrière-plan (je passe d'abord les données du script de contenu à la page d'arrière-plan, puis je les enregistre dans localStorage):
dans contentScript.js:
dans eventPage.js (votre page de fond):
Ensuite, vous pouvez accéder à cette variable dans popup.js avec localStorage ["total_elements"].
Peut-être que vous pouvez accéder à localStorage directement à partir du script de contenu dans les navigateurs modernes. Ensuite, vous n'avez pas besoin de transmettre les données via votre page d'arrière-plan.
Bonne lecture sur localStorage: http://diveintohtml5.info/storage.html
la source
.extension.xxx
, au lieu de simplement montrer la bonne manière (ce que certaines personnes pourraient considérer comme un " alternative tout aussi OK "). C'est plus une question de style, je suppose. Continuez votre bon travail!