如何从Chrome扩展程序调用OnBlur方法

时间:2016-09-30 13:18:49

标签: javascript google-chrome google-chrome-extension textbox onblur

我正在使用Chrome扩展程序,它只是将所有者帐户文本框与计划帐户文本框相同。文本框在原始网站上有onblur方法,在调用许多函数后通过循环方式将数据保存到服务器。

当我更改一个文本框时,我设置了另一个文本框的值。这视觉上有效。但是我没有实际点击的文本框中的数据没有保存到网络中。 (OwnerAccount已更新,计划帐户未更新)

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

tbSchedulingAccount.value = tbOwnerAccount.value;

但是现在是时候将值保存到服务器了。我认为简单模糊调度帐户会调用tbSchedulingAccount的onblur()方法。没有骰子。

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 个答案:

答案 0 :(得分:1)

尝试调度blur事件:

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

或者直接在注入的DOM脚本中运行onblur()

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,并说明如何在页面上下文中运行代码。