创建非DOM相关自定义事件(使用经典chrome.Event
接口)并手动存储并触发它的最常用方法是什么?
我的程序中有一个对象obj
,我想在其中创建一些事件对象,例如obj.event1
和obj.event2
,以便:
obj.event1.addListener(callback);
obj.event2.removeListener(callback);
...
是有效的电话。
我知道自己很容易实现它,但我想知道是否有更好的方法。感谢。
个人研究:
document
对象chrome.events
:显示界面,但未说明如何创建自定义事件答案 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"});