0

J'essaie d'obtenir les valeurs dans les éléments du nouvel onglet, puis cliquez sur soumettre pour me connecter. J'ai essayé de nombreuses variantes et je n'arrive pas à le faire fonctionner.L'exécution de l'extension chrome ne s'exécute pas correctement

function injectScript(){ 
var script = ' var e = document.getElementById("email"); var p = document.getElementById("password");'+ 
       'e.value ="'+currentEmployee.email+'"; p.value = "'+currentEmployee.password+'";'+ 
       'var osbut = document.getElementById("osLoginButton"); osbut.submit();'; 

chrome.tabs.create({ url: "https://www.example.com" }); 

    chrome.tabs.executeScript({ 
    code: script, runAt :"document_start" // i have tried document_idle and document_end too 
    }); 
//https://developer.chrome.com/extensions/tabs#method-executeScript 

}//end func 

Heres ce que le bouton ressemble à ce que je vise à soumettre

<button type="submit" id="osLoginButton" class="btn btn-block" 
ng-disabled="!user.email || !user.password || loggingIn" 
style="background:#6f5092; color:white; width:75%; 
display:block; margin-right:auto; margin-left:auto; margin-top:2rem;"><span> 
&nbsp;&nbsp;</span><span class="glyphicon glyphicon-log-in pull-left"></span>Sign me in</button> 

Voici l'erreur que je reçois sur le nouvel onglet dans la console

Unchecked runtime.lastError while running tabs.executeScript: Cannot access a chrome:// URL 
    at injectScript (chrome-extension://ihekknfdfleelcebfjflficdnebfadlc/popup.js:188:15) 
    at empLogin (chrome-extension://ihekknfdfleelcebfjflficdnebfadlc/popup.js:177:1) 
    at HTMLAnchorElement.<anonymous> (chrome-extension://ihekknfdfleelcebfjflficdnebfadlc/popup.js:160:42) 

    error in extension 

Est-il possible de la script cible l'extension? La nouvelle page de l'onglet est en cours d'exécution angular1. Je ne suis pas sûr que ce ng-disabled l'affecte car il faut du temps pour que l'angulaire change et le script échoue à cause de cela. Je ne peux pas non plus tester cela car il n'y a pas setTimeouts dans les extensions. Bien que j'ai essayé d'envoyer un setTimeout() dans le script exécuté, rien n'a fonctionné. Je n'arrive pas. Et non, je ne peux pas changer le bouton sur la page du nouvel onglet. Merci pour votre aide à l'avance.

+0

L'API est asynchrone de sorte que vous devez ExecuteScript dans le rappel de tabs.create à l'aide du paramètre 'tab' passé à ce rappel, et spécifiez' tab.id' dans le premier paramètre de ExecuteScript. Voir la documentation – wOxxOm

+0

Je pensais que le tab.id était optionnel et il était par défaut à l'onglet actuel qui serait le nouvel onglet. Je vais essayer d'ajouter le script d'injection comme rappel et voir si cela fonctionne. Merci, je vais essayer – Hunter

+0

"Current" signifie au moment où le code s'exécute, et executeScript s'exécute * avant * que l'onglet ne soit réellement créé car l'API est asynchrone. – wOxxOm

Répondre

1

La plupart des API d'extension de chrome sont asynchrones, vous devez attendre un rappel créé par un onglet.

chrome.tabs.create({ url: 'https://www.example.com' }, function (tab) { chrome.tabs.executeScript(tab.id, { code: 'code to inject...' }); });

+0

Votre format est logique, pouvez-vous regarder mon script var en haut pour voir s'il y a quelque chose qui ne va pas là-bas. Je n'arrive toujours pas à l'exécuter correctement. J'ai essayé avec votre format et toujours pas remplir les champs et soumettre. – Hunter

+0

J'ai suivi votre format et essayé d'injecter juste un console.log et ne peux pas obtenir ce travail. Laissez seul mon script actuel. Des idées? – Hunter