程序注入的变更和输入事件

时间:2014-10-12 17:43:22

标签: javascript events google-chrome-extension

我正在重新提出我的问题,因为第一次不清楚,我已经编辑了我的其他问题太多次了。我认为这是完全不同的,因为浏览器扩展澄清,它不应被视为重复问题。

此事件侦听器用于与个人网页交互的浏览器扩展,该页面在加载页面后通过服务器更新了元素(我只是使用提示来模拟元素的延迟更新)。这是一个调试脚本,用于为元素添加输入事件侦听器,以便在以编程方式为元素提供输入时调用另一个函数,此时,事件侦听器仅在手动获取其输入时运行。如果在一个脚本中调用了所有内容,我可以跳过额外的事件监听器,只需在更新元素后调用该函数,但扩展执行流是独立的,因此事件监听器需要分开。

HTML网页

<textarea id="fI"></textarea>
<button type="button" id='pressMe'>Press Me</button>
<textarea id="example2"></textarea>

的Javascript

document.getElementById("pressMe").addEventListener("click",doSomething);
function doSomething () {
  var something = prompt("Please enter something", "something");
  if (something !== null) {
    document.getElementById("fI").innerHTML = something;
  }
}

浏览器扩展内容脚本

document.getElementById("fI").addEventListener("input", blabla);
function blabla() {
  var something = document.getElementById("fI").innerHTML;
  document.getElementById("example2").innerHTML = something+" continue the rest of the script here";
}

1 个答案:

答案 0 :(得分:0)

很抱歉,我不确定您是否控制了价值的变化而没有获得该事件,或者是否有其他脚本正在控制价值的变化并且您没有获得该事件

如果您正在进行作业,并希望传播活动,那么您可以执行以下操作:

element.value = "a change that I want to fire an event.";
element.dispatchEvent(new Event('input'));

如果您想以其他方式以编程方式更改该值时获取该事件,那么您可能会因为捕获事件而失去运气。在这种情况下,您可以使用setInterval轮询值,尽管这非常简单。

function callOnValueChange(element, callback, once) {
     var initialValue = element.value,
         check;
     check = setInterval(function() {
         if (element.value !== initialValue) {
             callback.call(element);
             initialValue = element.value;
             if (once) clearInterval(check);     
         }
     }, 500);
}