J'essaye d'accéder au contenu DOM activeTab à partir de ma fenêtre contextuelle. Voici mon manifeste:
{
"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"
}
}
Je ne sais vraiment pas si les scripts d'arrière-plan (pages d'événements avec persistance: false) ou content_scripts sont la voie à suivre. J'ai lu toute la documentation et d'autres articles SO et cela n'a toujours aucun sens pour moi.
Quelqu'un peut-il expliquer pourquoi je pourrais utiliser l'un sur l'autre.
Voici le background.js que j'ai essayé:
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
// LOG THE CONTENTS HERE
console.log(request.content);
}
);
Et j'exécute simplement cela à partir de la console contextuelle:
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendMessage(tab.id, { }, function(response) {
console.log(response);
});
});
Je suis en train:
Port: Could not establish connection. Receiving end does not exist.
METTRE À JOUR:
{
"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);
});
});
Lorsque je l'exécute, j'obtiens toujours la même erreur:
undefined
Port: Could not establish connection. Receiving end does not exist. lastError:30
undefined
la source
chrome.runtime.sendMessage
envoie des messages à BackgroundPage et aux Popups.chrome.tabs.sendMessage
envoie des messages à ContentScripts.Vous n'avez pas besoin d'utiliser le message passant pour obtenir ou modifier le DOM. J'ai utilisé à la
chrome.tabs.executeScript
place. Dans mon exemple, j'utilise uniquement l'autorisation activeTab, par conséquent le script est exécuté uniquement sur l'onglet actif.partie de manifest.json
index.html
test.js
la source
activeTab
autorisation est inexacte. Vous obtenez clairement<all_urls>
en plus deactiveTab
.Pour ceux qui ont essayé la réponse gkalpak et cela n'a pas fonctionné,
sachez que chrome ajoutera le script de contenu à une page nécessaire uniquement lorsque votre extension sera activée lors du lancement de chrome et qu'il est également judicieux de redémarrer le navigateur après avoir effectué ces modifications
la source