J'ai essayé de nombreuses façons (toutes les procédures documentées) pour injecter un script dans une page spécifique lors de la vérification de l'URL sur onUpdated.addListener. Enfin, le code ci-dessous avec 'executescript' semble fonctionner, mais pas parfaitement. Je pourrais obtenir des alertes mais je ne peux pas trouver des éléments de document de la page via getElementById/getElementsByName.
Lorsque j'ai inspecté la page, le script est injecté. Mais dans la console d'erreur, j'obtiens:
Refuser la charge de l'extension chrome: //jfeiadiicafjpmaefageabnpamkapdhe/js/Leoscript.js. Les ressources doivent être répertoriées dans la clé de manifeste web_accessible_resources afin d'être chargées par des pages en dehors de l'extension.
Manifest.json:
{
"name": "Leo Extension for Job Boards",
"version": "1.6",
"manifest_version": 2,
"content_security_policy": "script-src 'self'; object-src 'self'",
"description": "Leo Extension",
"background": {
"scripts": ["js/Leojshelper.js"],
"persistent": true
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["js/eventPage.js"],
"run_at" : "document_start"
}
],
"icons":{"48":"images/bob48.png", "128":"images/bob128.png"}, //Define any icon sizes and the files that you want to use with them. 48/128 etc.
"browser_action": {
"default_icon": "images/bob.png", // What icon do you want to display on the chrome toolbar
"default_popup": "LeoExtwatch.html" // The page to popup when button clicked.
},
"permissions": [
"tabs", "<all_urls>" // "http://*/*","https://*/*" // Cross Site Access Requests
],
"web_accessible_resources": ["js/LeoScript.js"]
}
J'ai également donné l'autorisation "web_accessible_resources" au script, mais toujours sans succès. Code dans le script d'arrière-plan:
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
if (changeInfo.status == 'complete') {
if (tab.url.indexOf("in.yahoo") !== -1) {
chrome.tabs.update(tabId, { url: "https://login.yahoo.com/config/mail?.intl=us" });
chrome.tabs.executeScript(tabId, {
code: "document.body.appendChild(document.createElement('script')).src='" +
chrome.extension.getURL("js/LeoScript.js") + "';"
}, null);
Code dans LeoScript.js, qui sera injecté dans une page spécifique.
$(document).ready(function () {
alert('injected');
document.getElementById('username').value='aaaaaaa';
});
Script de contenu: eventPage.js que j'utilisais pour injecter le script.
var script = document.createElement('script');
script.src = chrome.extension.getURL("js/Leoscript.js");
(document.body || document.head || document.documentElement).appendChild(script);
Veuillez me signaler tout changement dans le code ci-dessus qui résoudra les problèmes d'autorisation. Merci d'avance.
MISE À JOUR: Enfin résolu votre problème. Dans eventPage.js, vous avez essayé d'injecter js/Leoscript.js, qui n'est PAS sur liste blanche, au lieu de js/LeoScript.js (avec un "S" majuscule), qui est sur liste blanche. Notez que les URL sont sensibles à la casse !
chrome.tabs.executeScript(tabId, {file: 'js/LeoScript.js'});
LeoScript.js:
alert('injected');
document.getElementById('username').value='aaaaaaa';
ÉDITER:
Ceci est une version de travail où la combinaison de web_accessible_resources et Injection est utilisée
manifest.json
{
"name":"Off Screen Tabs Demo",
"description":"This demonstrates Off Screen Tabs API",
"manifest_version":2,
"version":"1",
"permissions":["tabs","<all_urls>"],
"browser_action":{
"default_icon":"screen.png",
"default_popup":"popup.html"
},
"web_accessible_resources": ["js/LeoScript.js"] ,
"permissions":["tabs","<all_urls>"]
}
LeoScript.js
alert("Injected..");
popup.html
<html>
<head>
<script src="popup.js"></script>
</head>
<body>
</body>
</html>
popup.js *
document.addEventListener("DOMContentLoaded",function (){
chrome.tabs.executeScript( {"file": "js/LeoScript.js"});
});
Faites-moi savoir si vous rencontrez toujours des problèmes pour le faire fonctionner
Beaucoup arriveront sur cette page pour cette erreur car ils n'ont pas inclus leurs images/ressources Web dans le fichier manifest.json. Le lien vers la documentation de l'API est utile, alors partagez-le: ressource Web dans le manifeste