在Chrome扩展程序中创建自定义事件的最常用方法

时间:2016-04-28 07:13:45

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

创建非DOM相关自定义事件(使用经典chrome.Event接口)并手动存储并触发它的最常用方法是什么?

我的程序中有一个对象obj,我想在其中创建一些事件对象,例如obj.event1obj.event2,以便:

obj.event1.addListener(callback);
obj.event2.removeListener(callback);
...

是有效的电话。

我知道自己很容易实现它,但我想知道是否有更好的方法。感谢。

个人研究:

  • DOM events:是为document对象
  • 创建的
  • chrome.events:显示界面,但未说明如何创建自定义事件
  • Chrome events:它确实显示了如何向现有事件添加规则,但未显示如何创建自己的自定义事件。

2 个答案:

答案 0 :(得分:3)

chrome.Event不能用于自定义活动。

要触发没有库的自定义事件,可以按如下方式使用标准DOM事件:

public class MainActivity extends Activity {
Button button;
int x,f;
@SuppressLint("NewApi") @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button=(Button)findViewById(R.id.button1);                  
    button.setOnGenericMotionListener(new OnGenericMotionListener() {
    @Override
        public boolean onGenericMotion(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            switch (event.getAction()) {
            case MotionEvent.ACTION_SCROLL:             
                if (event.getAxisValue(MotionEvent.AXIS_VSCROLL) > 0.0f)
                {
                    x=Integer.parseInt(button.getText().toString());
                    f=x+5;
                    button.setText(""+f); 
                }
                else
                {
                    x=Integer.parseInt(button.getText().toString());
                    f=x-5;
                    button.setText(""+f); 
                }
            }
            return false;
        }
    });
}}

如您所见,无需在var listener = function(evt) { console.log(evt.detail); }; var target = document.createElement('a'); // Anything that implements EventTarget target.addEventListener('myEvent', listener); target.dispatchEvent(new CustomEvent('myEvent', { detail: 'test', })); 上注册所有事件,很可能使用任何实现EventTarget interface的对象。

答案 1 :(得分:0)

您可以使用message passing。即使您尝试从扩展程序的一部分(例如弹出窗口)触发事件,然后在另一部分(例如背景页面)中处理事件,这也将起作用:

要接收消息的地方,请注册事件处理程序:

chrome.runtime.onMessage.addListener(message => {
  if (!(event in message)) {
    return;
  }
  if (message.event == "sayHello") {
    console.log("Hello!");
  }
});

然后,您可以像在扩展程序的任何其他部分一样触发处理程序:

chrome.runtime.sendMessage({event: "sayHello"});