Saya mencoba mengakses konten DOM activeTab dari popup saya. Ini manifestasi saya:
{
"manifest_version": 2,
"name": "Test",
"description": "Test script",
"version": "0.1",
"permissions": [
"activeTab",
"https://api.domain.com/"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
"browser_action": {
"default_icon": "icon.png",
"default_title": "Chrome Extension test",
"default_popup": "index.html"
}
}
Saya benar-benar bingung apakah skrip latar belakang (halaman acara dengan ketekunan: false) atau content_scripts adalah cara yang harus dilakukan. Saya telah membaca semua dokumentasi dan posting SO lainnya dan masih tidak masuk akal bagi saya.
Adakah yang bisa menjelaskan mengapa saya mungkin menggunakan salah satu dari yang lain.
Berikut ini background.js yang saya coba:
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
// LOG THE CONTENTS HERE
console.log(request.content);
}
);
Dan saya hanya menjalankan ini dari konsol popup:
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendMessage(tab.id, { }, function(response) {
console.log(response);
});
});
Saya mendapatkan:
Port: Could not establish connection. Receiving end does not exist.
MEMPERBARUI:
{
"manifest_version": 2,
"name": "test",
"description": "test",
"version": "0.1",
"permissions": [
"tabs",
"activeTab",
"https://api.domain.com/"
],
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
],
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
"browser_action": {
"default_icon": "icon.png",
"default_title": "Test",
"default_popup": "index.html"
}
}
content.js
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.text && (request.text == "getDOM")) {
sendResponse({ dom: document.body.innerHTML });
}
}
);
popup.html
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendMessage(tab.id, { action: "getDOM" }, function(response) {
console.log(response);
});
});
Ketika saya menjalankannya, saya masih mendapatkan kesalahan yang sama:
undefined
Port: Could not establish connection. Receiving end does not exist. lastError:30
undefined
sumber
chrome.runtime.sendMessage
mengirim pesan ke BackgroundPage dan ke Popup.chrome.tabs.sendMessage
mengirim pesan ke ContentScripts.Anda tidak harus menggunakan message passing untuk mendapatkan atau mengubah DOM. Saya menggunakan
chrome.tabs.executeScript
sebagai gantinya. Dalam contoh saya, saya hanya menggunakan izin activeTab, oleh karena itu skrip dijalankan hanya pada tab aktif.bagian dari manifest.json
index.html
test.js
sumber
activeTab
izin tidak akurat. Anda jelas mendapatkan<all_urls>
tambahanactiveTab
.Bagi yang mencoba menjawab gkalpak dan tidak berhasil,
Ketahuilah bahwa chrome akan menambahkan skrip konten ke halaman yang diperlukan hanya jika ekstensi Anda diaktifkan selama peluncuran chrome dan juga sebaiknya mulai ulang browser setelah melakukan perubahan ini
sumber