js监听和发起自定义事件
监听
window.addEventListener("customer", function (event) {
});
发起
window.dispatchEvent(new CustomEvent("customer", {}));
监听
window.addEventListener("customer", function (event) {
});
发起
window.dispatchEvent(new CustomEvent("customer", {}));
function queryTabs(queryOptions) {
return new Promise((resolve, reject) => {
chrome.tabs.query(queryOptions, (result) => {
if (chrome.runtime.lastError) {
reject(chrome.runtime.lastError);
} else {
resolve(result);
}
});
});
}
chrome.runtime.onMessage.addListener( (request, sender, sendResponse) =>{
console.log(`receive message: `, request);
sendResponse({msg: 'msg'});
//表示异步操作,不会立刻关闭消息接收
return true;
chrome.runtime.sendMessage({type: "query"}, (res) => {
console.log("返回结果 ", res);
});
发送方
postMessage({type: 'NOTIFY', msg: 'msg'}, '*') //
接收方
window.onmessage = (e) => {
console.log("收到消息");
let { type , msg} = e.data;
switch (type) {
case "NOTIFY":
break;
}
};
mouse event
function createMouseEvent(eventType, rect) {
return new MouseEvent(eventType, {
bubbles: true,
cancelable: true,
view: window,
clientX: rect.left + rect.width / 2, // 元素的水平中心
clientY: rect.top + rect.height / 2, // 元素的垂直中心
screenX: window.screenX + rect.left + rect.width / 2, // 相对于屏幕的位置
screenY: window.screenY + rect.top + rect.height / 2, // 相对于屏幕的位置
button: 0 // 左键
});
}
const rect = ele.getBoundingClientRect();
ele.dispatchEvent(createMouseEvent('mousedown', rect));
ele.dispatchEvent(createMouseEvent('mouseup', rect));
ele.dispatchEvent(createMouseEvent('click', rect)); // 模拟 click 事件
point event
function createPointerEvent(eventType, rect) {
return new PointerEvent(eventType, {
bubbles: true,
cancelable: true,
view: window,
clientX: rect.left + rect.width / 2,
clientY: rect.top + rect.height / 2,
screenX: window.screenX + rect.left + rect.width / 2,
screenY: window.screenY + rect.top + rect.height / 2,
button: 0,
pointerId: 1, // 指针 ID,一般使用 1
width: 1, // 指针宽度
height: 1, // 指针高度
pressure: 0.5 // 模拟的触控压力,0-1 范围
});
}
let selects = document.getElementsByTagName("select");
if (selects.length !== selectAnswer.length) {
layer.msg("页面上的题可能已经发生了变化", { icon: 0 });
return;
}
let lastScope = NaN;
let idx = -1;
// 获取Angular作用域
selectAnswer.forEach((answer, index) => {
let scope = angular.element(selects[index]).scope();
// console.log(scope.subject.sub_subjects);
// console.log(lastScope === scope, lastScope);
if (idx === -1) {
idx = 0;
} else if (lastScope === scope) {
idx += 1;
} else {
idx = 0;
}
lastScope = scope;
//angular.element(document.getElementsByTagName("select")[0]).scope().subject.sub_subjects;
scope.$apply(() => {
console.log(scope.subject.sub_subjects[idx]);
let old = scope.subject.sub_subjects[idx].answeredOption;
scope.subject.sub_subjects[idx].answeredOption = answer;
scope.onChangeSubmission(scope.subject.sub_subjects[idx]);
console.log(scope.subject.sub_subjects[idx]);
console.log(
`old: ${old},new:${answer}, now:${scope.subject.sub_subjects[idx].answeredOption}`,
);
});
$(selects[index]).multiselect("refresh");
angular.element(selects[index]).triggerHandler("change");
});