1

Я работаю над расширением Chrome, которое просто делает текстовое поле учетной записи владельца таким же, как текстовое поле учетной записи планирования. Текстовые поля имеют onblur-методы на исходном веб-сайте, которые через круглые сутки после вызова многих функций сохраняют данные на сервере.Как вызвать метод OnBlur из расширения Chrome

Когда я меняю одно текстовое поле, я устанавливаю значение другого текстового поля. Это работает визуально. Но данные не сохраняются в сети для текстового поля, на которое я фактически не нажимаю. (OwnerAccount обновляется, планирование счета не)

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

tbSchedulingAccount.value = tbOwnerAccount.value; 

Но теперь пришло время, чтобы сохранить значение на сервер. Я думал, что просто размытие учетной записи планирования вызовет метод onblur() для tbSchedulingAccount. Нет кубиков.

tbSchedulingAccount.blur(); 

Я также попытался:

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

(с и без размытия в конце - пользователь будет, естественно, нажмите где-нибудь, так что, если я могу получить курсор в текстовом поле tbSchedulingAccount, он должен размытие по своей собственной)

Я пытался вызвать функцию с помощью консоли Chrome, и она работает:

tbSchedulingAccount.onblur(); 

, но я не могу заставить его фактически размыть и вызвать функцию, используя tbSchedulingAccount.blur();

Если это любая помощь, вот элемент я пытаюсь размыть:

<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;"> 

Итак, мой главный вопрос:

  • Могу ли я вызвать функцию ONBLUR от расширения, когда другой текстовое поле теряет фокус?

(я должен отметить, текстовое поле я хочу вызвать функцию из (tbOwnerAccount) имеет ONBLUR в оригинальном сайте, что я не могу возиться с или это не будет сохранить на сервере)

Вот весь мой код до сих пор:

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> 

} 

Спасибо за любую помощь вы можете предоставить!

ответ

1

Попробуйте диспетчерская blur событие:

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

Или запустить onblur() непосредственно в введенном DOM-скрипта:

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

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

См Inject code in a page using a Content script, что объясняет различия между контекстами кода страницы и кода сценария контента и шоу как запустить код в контексте страницы.