Saya tahu ini telah ditanyakan di banyak posting tetapi jujur saya tidak mengerti. Saya baru mengenal JavaScript, Ekstensi Chrome, dan segalanya, dan saya memiliki tugas kelas ini. Jadi saya perlu membuat plugin yang akan menghitung objek DOM pada halaman tertentu menggunakan Permintaan Lintas Domain. Saya sudah bisa mencapai ini sejauh ini menggunakan API Ekstensi Chrome. Sekarang masalahnya adalah saya perlu menampilkan data di halaman popup.html saya dari file contentScript.js. Saya tidak tahu bagaimana melakukannya. Saya sudah mencoba membaca dokumentasinya tetapi mengirim pesan di chrome saya tidak mengerti apa yang harus dilakukan.
berikut adalah kodenya sejauh ini.
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
});
Bantuan apa pun akan dihargai dan harap hindari noobness yang saya lakukan :)
sumber
chrome.tabs.sendMessage
popupjs danchrome.runtime.onMessage.addListener
di content.js mengapa.tabs
untuk popupjs dan.runtime
di content.jsAnda dapat menggunakan localStorage untuk itu. Anda dapat menyimpan data apa pun dalam format tabel hash di memori browser dan kemudian mengaksesnya kapan saja. Saya tidak yakin apakah kita dapat mengakses localStorage dari skrip konten (sebelumnya diblokir), coba lakukan sendiri. Berikut cara melakukannya melalui halaman latar belakang Anda (saya meneruskan data dari skrip konten ke halaman latar belakang terlebih dahulu, kemudian menyimpannya di penyimpanan lokal):
di contentScript.js:
di eventPage.js (halaman latar belakang Anda):
Kemudian Anda dapat mengakses variabel itu di popup.js dengan localStorage ["total_elements"].
Mungkin Anda dapat mengakses localStorage langsung dari skrip konten di browser modern. Maka Anda tidak perlu meneruskan data melalui halaman latar belakang Anda.
Bacaan bagus tentang localStorage: http://diveintohtml5.info/storage.html
sumber
.extension.xxx
, daripada hanya menunjukkan cara yang benar (yang mungkin dianggap beberapa orang sebagai " alternatif yang sama-sama OK "). Saya kira ini lebih ke masalah gaya. Pertahankan kerja bagus!