1

Je travaille sur une extension Chrome qui fait simplement de la zone de texte d'un compte propriétaire la même que la zone de texte d'un compte de planification. Les zones de texte ont des méthodes onblur sur le site Web d'origine qui, après avoir fait un tour complet après avoir appelé de nombreuses fonctions, sauvegardent les données sur le serveur.Comment appeler une méthode OnBlur à partir d'une extension Chrome

Lorsque je change une zone de texte, je définis la valeur de l'autre zone de texte. Cela fonctionne visuellement. Mais les données ne sont pas enregistrées sur le réseau pour la zone de texte sur laquelle je ne clique pas. (Compte de propriétaire est mis à jour, le compte de planification n'est pas)

var tbOwnerAccount = document.getElementById("ctl00_ContentPlaceHolder1_txtOwnerAccountNumber"); 
var tbSchedulingAccount = document.getElementById("ctl00_ContentPlaceHolder1_txtSchedulingAccountNumber"); 

tbSchedulingAccount.value = tbOwnerAccount.value; 

Mais maintenant il est temps d'enregistrer la valeur sur le serveur. Je pensais que flouter simplement le compte d'ordonnancement appelait la méthode onblur() de tbSchedulingAccount. Pas de dé.

tbSchedulingAccount.blur(); 

J'ai aussi essayé:

tbSchedulingAccount.focus(); 
tbSchedulingAccount.select(); 
tbSchedulingAccount.value = tbOwnerAccount.value; 

(avec et sans flou à la fin - l'utilisateur cliquera naturellement quelque part, donc si je peux obtenir le curseur dans la zone de texte tbSchedulingAccount, il devrait le flou sur son propre)

J'ai essayé d'appeler la fonction à l'aide de la console Chrome, et il fonctionne:

tbSchedulingAccount.onblur(); 

mais je n'arrive pas à le faire flouter et appeler la fonction en utilisant tbSchedulingAccount.blur();

Si c'est une aide, voici l'élément que je suis en train de brouiller:

<input name="ctl00$ContentPlaceHolder1$txtSchedulingAccountNumber" 
type="text" maxlength="25" id="ctl00_ContentPlaceHolder1_txtSchedulingAccountNumber" 
tabindex="9" class="textbox" onblur=" MASSIVE PROPRIETARY FUNCTION" 
onkeydown="javascript:if(event != null &amp;&amp; event.keyCode == 13){ 
MASSIVE PROPRIETARY FUNCTION" style="width:200px;"> 

Alors, ma question principale est la suivante:

  • Puis-je appeler la fonction onblur d'une extension lorsqu'un autre zone de texte perd la mise au point?

(Je dois souligner, la zone de texte que je veux appeler la fonction de (tbOwnerAccount) a un onblur sur le site d'origine que je ne peux pas jouer avec ou il ne sauvera pas au serveur)

est ici tout mon code à ce jour:

var tbOwnerAccount = document.getElementById("ctl00_ContentPlaceHolder1_txtOwnerAccountNumber"); 
tbOwnerAccount.onblur = updateSchedule; 

function updateSchedule(){ 
    var tbOwnerAccount = document.getElementById("ctl00_ContentPlaceHolder1_txtOwnerAccountNumber"); 
    var tbSchedulingAccount = document.getElementById("ctl00_ContentPlaceHolder1_txtSchedulingAccountNumber"); 

    console.log("Fired"); 

    <CODE FOR THE ORIGINAL WEBSITE'S .ONBLUR ON tbSchedulingAccount TO FIRE> 

} 

Merci pour toute aide que vous pouvez fournir!

Répondre

1

Essayez l'envoi blur événement:

tbOwnerAccount.dispatchEvent(new Event('blur')) 

Ou exécuter onblur() directement dans un script DOM injecté:

runDOMscript(function() { 
    document.getElementById("ctl00_ContentPlaceHolder1_txtOwnerAccountNumber").onblur(); 
}); 

function runDOMscript(fn) { 
    var script = document.head.appendChild(document.createElement('script')); 
    script.text = '(' + fn + ')()'; 
    script.remove(); 
} 

Voir Inject code in a page using a Content script qui explique les différences entre les contextes de code de la page et le code de script contenu et spectacles comment exécuter du code dans le contexte de la page.