Ich weiß, dass dies in zahlreichen Posts gefragt wurde, aber ehrlich gesagt verstehe ich sie nicht. Ich bin neu in JavaScript, Chrome Extensions und allem und habe diese Klassenzuordnung. Daher muss ich ein Plugin erstellen, das DOM-Objekte auf einer bestimmten Seite mithilfe domänenübergreifender Anforderungen zählt. Bisher konnte ich dies mithilfe von Chrome Extension-APIs erreichen. Das Problem ist nun, dass ich die Daten auf meiner popup.html-Seite aus der Datei contentScript.js anzeigen muss. Ich weiß nicht, wie ich das machen soll. Ich habe versucht, die Dokumentation zu lesen, aber Nachrichten in Chrome kann ich einfach nicht verstehen, was ich tun soll.
Es folgt der bisherige Code.
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
});
Jede Hilfe wäre dankbar und bitte vermeiden Sie jegliche Noobness, die ich getan habe :)
quelle
chrome.tabs.sendMessage
in popupjs undchrome.runtime.onMessage.addListener
in content.js verwendet haben warum.tabs
für popupjs und.runtime
in content.jsSie können dafür localStorage verwenden. Sie können alle Daten in einem Hash-Tabellenformat im Browserspeicher speichern und dann jederzeit darauf zugreifen. Ich bin nicht sicher, ob wir über das Inhaltsskript (es wurde zuvor blockiert) auf localStorage zugreifen können. Versuchen Sie es selbst. So geht's über Ihre Hintergrundseite (ich übergebe Daten vom Inhaltsskript zuerst an die Hintergrundseite und speichere sie dann in localStorage):
in contentScript.js:
in eventPage.js (Ihre Hintergrundseite):
Dann können Sie mit localStorage ["total_elements"] auf diese Variable in popup.js zugreifen.
Möglicherweise können Sie in modernen Browsern direkt über das Inhaltsskript auf localStorage zugreifen. Dann müssen Sie die Daten nicht über Ihre Hintergrundseite weitergeben.
Gute Lektüre über localStorage: http://diveintohtml5.info/storage.html
quelle
.extension.xxx
, anstatt nur den richtigen Weg aufzuzeigen (was manche Leute vielleicht als " ebenso OK Alternative "). Es ist eher eine Frage des Stils, denke ich. Mach weiter so !